我正在尝试在JavaScript中进行跨域API调用。

我曾尝试使用JSONP使用angular的$ http,但API服务器不支持JSONP,仅支持json。
使用JSONP时,出现“意外令牌”错误。
Fiddler显示请求成功,并获取正确的json对象。
有没有办法绕过错误并获得提琴手得到什么?

作为替代方案,如here所述,我尝试使用XMLHttpRequest进行CORS。
该请求失败,并带有通常的“所请求的资源上没有'Access-Control-Allow-Origin'标头。”。
但是,Fiddler显示请求成功,返回码为200。

我一点都不明白。
为什么提琴手说返回码是200,但CORS调用失败?

另外,我可以从浏览器(firefox和chrome)中访问API网址,而不会出现问题。该API是公开的,不需要任何授权。

最佳答案

我一点都不明白。为什么提琴手说返回码是200,但CORS调用失败?


因为是强制执行SOP的浏览器。因此,您发出请求,服务器发回响应,浏览器查看响应并说:“不,我不能将此代码提供给响应。”

如果另一端不支持您的来源的CORS请求,并且它们不支持JSONP,则必须通过代理:例如,如果您的解决方案有服务器,则将请求发送到服务器,然后让您的服务器从远程API请求数据,然后将其发送回给您。


  另外,我可以从浏览器(firefox和chrome)中访问API网址,而不会出现问题。


这是因为,当您在地址栏中输入地址时,您没有在发出Ajax请求,因此SOP不适用。


  该API是公开的,不需要任何授权。


与他们联系,询问他们是否支持CORS或JSONP,而您只是在启用它的文档中错过了一些东西。但是请注意,有一些公共API可能是公共的并且是开放的,但不支持CORS或JSONP。它们可能是供台式机或服务器使用的,而非ajax。

10-07 19:04
查看更多