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函数是唯一一个始终显示的函数。 这是控制台:

IE11控制台中的错误

挪威语中说这个脚本请求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调用中请求来自其他域的数据。