Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSONP调用的跨域AJAX返回纯JSON_Javascript_Jquery_Ajax_Json_Jsonp - Fatal编程技术网

Javascript 使用JSONP调用的跨域AJAX返回纯JSON

Javascript 使用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

我遇到了我想要使用的API的问题。API返回纯JSON,但它是一个跨域AJAX调用,因此我必须使用jsonp

            $.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,这里有一个很好的解释,说明了它是如何工作的以及为什么工作的:


我忘了提到我在服务器上没有权限,因此无法更改那里的标题。