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的答案,并尝试了许多方法无济于事。

+0

我的猜测是你得到'Uncaught SyntaxError:意外的标记:'的原因是因为jQuery请求'JSONP',但你得到了'JSON'。除非您链接您从中获​​取的URL,否则我无法再告诉您其他任何信息。 – Eclecticist 2015-02-08 07:27:33

您需要更改服务器端的某些内容才能在浏览器中完成此项工作。服务器需要支持JSONP或CORS才能跨域访问。

您无法进行仅客户端更改以使JSONP或CORS正常工作 - 服务器必须配合使用。

使用CORS,客户端和服务器之间的http请求中必须存在正确的标头,以便允许浏览器处理跨源请求。使用JSONP,它是一种完全不同于服务器的响应类型,它使JSONP能够工作(数据包装在JavaScript脚本中),因此服务器必须产生这种其他类型的响应才能使JSONP正常工作。


如果你认为你的服务器已经支持通过CORS交叉起源的请求,那么有可能是在执行了错误的地方。


为了保护使用浏览器的用户,浏览器内部实现了交叉原点限制。这样的限制不是由服务器实施的,所以服务器不限于它们可以连接到的源。

+0

感谢您的回答,我怀疑它不在我的控制之下。但是,我怎么能够使用节点服务器发送工作响应呢?客户不能复制相同的确切请求吗? – woojoo666 2015-02-08 07:41:13

+0

@ woojoo666 - 浏览器本身强制实施交叉原点限制(以保护使用浏览器的最终用户)。服务器没有这种交叉源限制。 – jfriend00 2015-02-08 07:43:41

+0

呵呵,我对CORs的知识非常有限,所以非常感谢你帮我解决问题! – woojoo666 2015-02-08 07:46:33