无法获取json数据,给出Cors或回调错误

时间:2015-04-21 08:43:47

标签: javascript jquery json cors

我正在尝试从REST API获取一些JSON数据,但是当我用dataType param作为jsonp调用它时,它给我一个错误,即jQuery'回调是不叫'。这是错误消息:

  

错误:状态:parsererror消息:错误:未调用jQuery2130732580496231094_1429605569499

因此,如果我尝试在没有jsonp的情况下发出此请求,使用JSON作为dataType,则会给出另一个关于CORS的错误:

  

请求的资源上没有“Access-Control-Allow-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,打印或处理它。
谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

  

错误:状态:parsererror消息:错误:未调用jQuery2130732580496231094_1429605569499

您请求数据的服务器必须支持JSONP才能向其发出成功的JSONP请求。

有关如何操作的详细信息,请参阅主题the Wikipedia article

  

我已经阅读过有关CORS的内容,并且无法将其设置为启用它的参数。

在您发出请求的服务的HTTP响应标头中。

e.g。您example.com上的页面想要使用JS从example.net获取数据。因此example.net必须告诉用户的浏览器允许example.com访问数据。

答案 1 :(得分:0)

要启用CORS请求,您必须允许来自服务器部分的此类请求,并从您的客户端创建一个允许获取cors资源的请求: 仅使用GET,HEAD或POST和内容类型application / x-www-form-urlencoded,multipart / form-data或text / plain。

您的客户端部分似乎是正确的,我认为您必须处理服务器以允许此类请求。 您可以获得更多信息here

答案 2 :(得分:0)

最后,经过几天研究这个问题,我已经解决了这个问题。不是从最简单的方式,但......解决了:D

我在NodeJ上用express和request写了一个应用程序,并使用它返回了我所有的json对象。现在我可以通过快递将它发送到我的javascript var。

感谢所有回复人员!和平。