JQuery AJAX CORs错误
问题描述:
我有一个网站,需要一个GET请求并返回一个JSON。我可以使用节点服务器向网站发送请求并接收正确的响应。JQuery AJAX CORs错误
$.ajax({
url: '<myurl>',
type: 'GET',
crossDomain: true,
success: function() { alert("Success"); },
error: function() { alert('Failed!'); }
});
我得到的错误
XMLHttpRequest cannot load <myurl>. No 'Access-Control-Allow-Origin' header
is present on the requested resource. Origin 'http://localhost:8080' is
therefore not allowed access.
当我尝试通过增加dataType: 'jsonp',
Ajax请求更改数据类型,以JSONP,我得到:然而,当我尝试使用客户端的JavaScript发送错误
Uncaught SyntaxError: Unexpected token :
Chrome开发者控制台告诉我的错误是从脚本<myurl>&callback=jQuery21309685717469546944_1423379667604&_=1423379667605
来了,当我打开脚本我发现JSON respon我正在尝试检索!但我猜不知它被解释为一个JavaScript函数。任何方式来解决这个问题?我读过很多SO的答案,并尝试了许多方法无济于事。
答
您需要更改服务器端的某些内容才能在浏览器中完成此项工作。服务器需要支持JSONP或CORS才能跨域访问。
您无法进行仅客户端更改以使JSONP或CORS正常工作 - 服务器必须配合使用。
使用CORS,客户端和服务器之间的http请求中必须存在正确的标头,以便允许浏览器处理跨源请求。使用JSONP,它是一种完全不同于服务器的响应类型,它使JSONP能够工作(数据包装在JavaScript脚本中),因此服务器必须产生这种其他类型的响应才能使JSONP正常工作。
如果你认为你的服务器已经支持通过CORS交叉起源的请求,那么有可能是在执行了错误的地方。
为了保护使用浏览器的用户,浏览器内部实现了交叉原点限制。这样的限制不是由服务器实施的,所以服务器不限于它们可以连接到的源。
我的猜测是你得到'Uncaught SyntaxError:意外的标记:'的原因是因为jQuery请求'JSONP',但你得到了'JSON'。除非您链接您从中获取的URL,否则我无法再告诉您其他任何信息。 – Eclecticist 2015-02-08 07:27:33