Javascript 使用JSONP调用的跨域AJAX返回纯JSON
我遇到了我想要使用的API的问题。API返回纯JSON,但它是一个跨域AJAX调用,因此我必须使用jsonpJavascript 使用JSONP调用的跨域AJAX返回纯JSON,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,我遇到了我想要使用的API的问题。API返回纯JSON,但它是一个跨域AJAX调用,因此我必须使用jsonp $.ajax({ type: "GET", url: url + query, contentType: "application/json", dataType: "jsonp", success: fu
$.ajax({
type: "GET",
url: url + query,
contentType: "application/json",
dataType: "jsonp",
success: function(data){
console.log(data);
}
});
问题是,当我将数据类型更改为“json”时,会发生错误:
请求的服务器上不存在“Access Control Allow Origin”标头
资源因此,不允许访问源“X”
这是因为它是一个跨域ajax调用。但当它是jsonp时,它会说:
未捕获的语法错误:意外标记:
换句话说,它不识别json格式
我正在使用jquery进行ajax调用。有什么建议可以解决这个问题吗?因为您无法访问API所在的服务器,所以您可以使用像CURL这样的web服务实用程序来访问API。AJAX调用要求在提供API的服务器上启用CORS(跨源资源共享)
您可以通过AJAX在本地服务器页面上调用web服务,将从该页面进行CURL调用并返回相应的响应。有几种方法可以绕过跨域限制(CORS、JSONP、Iframe传输等),但所有方法都有共同点,API服务器需要使用这些方法。因此,如果您在API服务器上没有权限,则无法跨越跨域限制 实现这一点的唯一方法是在您可以控制的API前面放置一个代理(该代理可以位于同一个域上,也可以插入适当的CORS头)。然而,这将影响绩效,并可能产生法律影响 关于JSONP,这里有一个很好的解释,说明了它是如何工作的以及为什么工作的:
我忘了提到我在服务器上没有权限,因此无法更改那里的标题。