【发布时间】:2015-06-28 07:32:10
【问题描述】:
我正在尝试从 REST API 获取一些 JSON 数据,但是当我使用 dataType 参数作为 jsonp 调用它 cia 时,它给了我一个错误,即 jQuery '回调未被调用'。这是错误信息:
错误:状态:解析器错误消息:错误:未调用 jQuery2130732580496231094_1429605569499
所以,如果我尝试在没有jsonp 的情况下发出此请求,使用 JSON 作为dataType,它会给我另一个关于 CORS 的错误:
请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。
我知道这是一个白痴问题,但我已经阅读了有关 CORS 的信息,只是不知道在哪里放置它的参数来启用它。对我来说,正确的是使用我用过的第一种方法,但是在寻找那个问题的答案之后,我什么都不懂。如果有一天我能理解将 CORS 放在哪里,我应该以另一种方式提出请求。
所以他们是我的问题,这是我的代码:
$.ajax({
url: 'eztvapi.re/shows/1';,
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
success: function(data) {
//data = JSON.parse(data);
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error: Status: " + textStatus + " Message: " + errorThrown);
}
});
这是我从控制台发出的标头请求:
Remote Address:216.58.222.12:443
Request URL:http://eztvapi.re/shows/1?callback=jQuery213010618196451105177_1429606458524&_=1429606458525
Request Method:GET
Status Code:200 OK
Response Headers
cache-control:private
content-encoding:gzip
content-type:application/json; charset=utf-8
date:Tue, 21 Apr 2015 08:54:22 GMT
etag:W/"0hnqCn40L98JLmwY2UfUlg=="
server:nginx
status:200
vary:Accept-Encoding
via:1.1 Chrome-Compression-Proxy
x-powered-by:Express
x-response-time:32ms
x-served-by:us-la3
Request Headers
:authority:eztvapi.re
:method:GET
:path:/shows/1?callback=jQuery213010618196451105177_1429606458524&_=1429606458525
:scheme:http
accept:*/*
accept-encoding:gzip, deflate, sdch
accept-language:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
chrome-proxy:ps=1429584828-1395746459-275388119-220935266, sid=a259cd2eeb457c7a40ff6367868ef723, c=win, b=2311, p=90
user-agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Query String Parameters
view source
view URL encoded
callback:jQuery213010618196451105177_1429606458524
_:1429606458525
这是请求返回的 json 对象,但它只出现在控制台网络部分:
0: {_id: "tt0944947",…}
1: {_id: "tt0903747",…}
2: {_id: "tt0898266",…}
3: {_id: "tt1520211",…}
4: {_id: "tt0773262",…}
5: {_id: "tt0460649",…}
6: {_id: "tt1475582",…}
7: {_id: "tt2193021",…}
8: {_id: "tt1796960",…}
9: {_id: "tt1119644",…}
10: {_id: "tt0411008",…}
我最近做了很多其他休息的请求,所以我认为客户端是正确的。这是我正在测试我的请求的新服务器,但这不是我的服务器域,它低于流行的休息服务器,我相信它支持 json 调用。有趣的是,自从我开始使用这个新产品以来,我一直在问自己,这是我得到的回应。您可以看到服务器使用正确的数据回答了我的请求,但我无法将数据获取到我的 javascript、打印或处理它。
感谢您的帮助。
【问题讨论】:
-
将代码发布到您的尝试中,最好还有一些有关 REST API 的详细信息。
-
你能发布一些代码吗?您提出 JSONP 请求的方式?
-
$.ajax({ url: 'eztvapi.re/shows/1', type: 'GET', dataType: 'jsonp', crossDomain:true, success:function(data){ console.log(data) ; }, error : function(jqXHR, textStatus, errorThrown) { console.log("Error: Status: "+textStatus+" Message: "+errorThrown); } });这是我的第一次尝试,作为 dataType jsonp,但如果我将其取下或不带 jsonp 放置,则会出现 cors 错误。
-
您确定您调用的 REST API 支持 JSONP 格式吗?从第一条错误消息听起来好像它没有返回回调参数。从您的第二条错误消息来看,它也不支持 CORS(这不是您可以更改的 - 它是在服务器上完成的)。如果这两种情况都成立,那么您无法在 JavaScript 中从此 API 请求数据 - 您需要使用服务器端调用。
-
您的编辑实际上并没有告诉我们任何我们无法推断的内容:根据我的回答:您发出请求的服务器不支持 JSONP 并且未配置为给您使用 CORS 访问数据的权限。
标签: javascript jquery json cors