XMLHttpRequest()JSON抛出网络错误但类似的jQuery .getJSON代码有效
我有一个从外部网站加载的JSON脚本。 在最简单的forms中,代码就像这样(并且正在工作):
jQuery.getJSON("http://adressesok.posten.no/api/v1/postal_codes.json?postal_code=" + document.querySelector("input").value + "&callback=?", function(data){ document.querySelector("output").textContent = data.postal_codes[0].city; });
但是,网站所有者不希望jQuery,如果它.getJSON
,所以我将.getJSON
重新编码为request = new XMLHttpRequest();
模型:
request = new XMLHttpRequest(); request.open("GET", "http://adressesok.posten.no/api/v1/postal_codes.json?postal_code=" + document.querySelector("input").value + "&callback=?", true); request.onload = function() { var data = JSON.parse(request.responseText); document.querySelector("output").textContent = data.postal_codes[0].city; }; request.onerror = function() { /* this gets called every time */ };
我已多次修改我的代码,一遍又一遍地阅读文档,但.onerror
函数是唯一一个始终显示的函数。 这是控制台:
挪威语中说这个脚本请求CORS,它无法在Access-Control-Allow-Origin的头部找到原点,并且XMLHttpRequest有网络错误,并说“无法访问”。
可能有几个原因导致这种情况发生:
1:新代码有问题
2: .getJSON
jQuery函数(黑客?)中有一些东西可以防止错误发生
3:我忘记添加的新代码中有一些重要的东西
4:我的浏览器有一些东西(目前是IE 11)
5:还有别的吗?
在这方面有一些帮助会很可爱。
演示: http : //jsbin.com/muxigulegi/1/
这不是网络错误。 这是一个跨源错误。 请求成功,但浏览器拒绝访问您的JavaScript响应。
既然你有callback=?
在URL中,jQuery将生成JSONP请求而不是XMLHttpRequest请求。 这将作为脚本执行响应,而不是读取原始数据。
您正在手动创建XMLHttpRequest,因此由于同源策略而失败。
请改为创建JSONP请求 。
来自http://api.jquery.com/jquery.getjson/ :
JSONP
如果URL包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。 有关更多详细信息,请参阅$ .ajax()中有关jsonp数据类型的讨论。
你有一个回调。 这意味着JQuery函数可以从XHR调用中请求来自其他域的数据。