Javascript JSON抛出一个网络错误,但类似的jQuery.getJSON代码也可以工作
我有一个从外部网站加载的JSON脚本。在其最简单的形式中,代码是这样的(并且工作正常): 但是,如果jQuery不是关键的,网站所有者就不想要它,因此我将Javascript JSON抛出一个网络错误,但类似的jQuery.getJSON代码也可以工作,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我有一个从外部网站加载的JSON脚本。在其最简单的形式中,代码是这样的(并且工作正常): 但是,如果jQuery不是关键的,网站所有者就不想要它,因此我将.getJSON重新编码到request=new-XMLHttpRequest()模型: request = new XMLHttpRequest(); request.open("GET", "http://adressesok.posten.no/api/v1/postal_codes.json?postal_code=" + docume
.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:我的浏览器有问题(目前是11)
5:还有别的吗
如果能在这方面得到一些帮助,那就太好了
演示:这不是网络错误。这是一个跨原点错误。请求成功,但浏览器拒绝访问对JavaScript的响应
由于URL中有callback=?
,jQuery将生成JSONP请求,而不是XMLHttpRequest请求。这将作为脚本执行响应,而不是读取原始数据
您正在手动创建一个XMLHttpRequest,因此由于同源策略,它将失败
相反。这不是网络错误。这是一个跨原点错误。请求成功,但浏览器拒绝访问对JavaScript的响应
由于URL中有callback=?
,jQuery将生成JSONP请求,而不是XMLHttpRequest请求。这将作为脚本执行响应,而不是读取原始数据
您正在手动创建一个XMLHttpRequest,因此由于同源策略,它将失败
取而代之。来自:
JSONP
如果URL包含字符串“callback=?”(或类似字符串,由服务器端API定义),则请求将被视为JSONP。有关更多详细信息,请参阅$.ajax()中对jsonp数据类型的讨论
你有回电话。这意味着JQuery函数可以从另一个域请求数据,这与XHR调用不同。来自:
JSONP
如果URL包含字符串“callback=?”(或类似字符串,由服务器端API定义),则请求将被视为JSONP。有关更多详细信息,请参阅$.ajax()中对jsonp数据类型的讨论
你有回电话。这意味着JQuery函数可以从另一个域请求数据,这与XHR调用不同。谢谢。你能通过修改一些代码来引导我的代码朝正确的方向发展吗?我不能一个人把所有的碎片拼在一起。我在这方面不是很好。@mangseth-链接的问题有三个答案和示例。所有三个示例都向您展示了如何检索值。谢谢,我现在终于看到了。谢谢你的帮助(也谢谢你没有投我一票),谢谢。你能通过修改一些代码来引导我的代码朝正确的方向发展吗?我不能一个人把所有的碎片拼在一起。我在这方面不是很好。@mangseth-链接的问题有三个答案和示例。所有三个示例都向您展示了如何检索值。谢谢,我现在终于看到了。谢谢你的帮助(也谢谢你没有投我一票)
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 */ };