json Uncaught SyntaxError:意外的令牌:

pap*_*ush 69 ajax jquery json syntax-error

尝试进行调用并检索一个非常简单的一行JSON文件.

$(document).ready(function() {

    jQuery.ajax({ 
        type: 'GET',
        url: 'http://wncrunners.com/admin/colors.json' ,
        dataType: 'jsonp', 
        success: function(data) { 
            alert('success');
        }
    });


  });//end document.ready
Run Code Online (Sandbox Code Playgroud)

这是RAW请求:

GET http://wncrunners.com/admin/colors.json?callback=jQuery16406345664265099913_1319854793396&_=1319854793399 HTTP/1.1
Host: wncrunners.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: */*
Referer: http://localhost:8888/jquery/Test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Run Code Online (Sandbox Code Playgroud)

这是RAW响应:

HTTP/1.1 200 OK
Date: Sat, 29 Oct 2011 02:21:24 GMT
Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d SE/0.5.3
Last-Modified: Fri, 28 Oct 2011 17:48:47 GMT
ETag: "166a2402-10-4eaaeaff"
Accept-Ranges: bytes
Content-Length: 16
Content-Type: text/plain
Connection: close

{"red" : "#f00"}
Run Code Online (Sandbox Code Playgroud)

JSON将在响应中返回(红色:#f00),但Chrome报告Uncaught SyntaxError:意外的令牌:colors.json:1

如果我直接导​​航到url本身,则会返回JSON并显示在浏览器中.

如果我将colors.json的内容粘贴到JSLINT中,则json会验证.

任何想法为什么我不能得到这个错误,我从来没有成功回调?

编辑 - 上面的jQuery.ajax()调用在jsfiddle.net上运行完美,并按预期返回警报"成功".

编辑2 - 此URL工作正常'http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json'我注意到它返回TYPE:text/javascript并且Chrome没有抛出意外的令牌.我已经测试了其他几个url,而且只有一个没有抛出Unexptected Token的是wunderground,它返回TYPE:text/javascript.

以text/plain和application/json返回的流未正确解析.

Joh*_*ess 129

你已经告诉了jQuery期待JSONP响应,这就是为什么jQuery的添加了callback=jQuery16406345664265099913_1319854793396&_=1319854793399部分的URL(你可以看到这个在你请求的转储).

你要归的是JSON,而不是JSONP.你的回答看起来像

{"red" : "#f00"}
Run Code Online (Sandbox Code Playgroud)

和jQuery期待这样的事情:

jQuery16406345664265099913_1319854793396({"red" : "#f00"})
Run Code Online (Sandbox Code Playgroud)

如果您确实需要使用JSONP来绕过相同的源策略,那么服务器服务colors.json需要能够实际返回JSONP响应.

如果相同的原始策略不是您的应用程序的问题,那么您只需要dataType在您的jQuery.ajax调用中修复json而不是jsonp.

  • 谢谢约翰.如果我使用相同的代码并将其指向**http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json'**那么响应确实包含了jQueryxxxx()围绕json数据,代码运行正常,我收到"成功"警报.我无法更改远程服务器提供JSON文件的方式.如果我使用dataType:'json'然后我得到**XMLHttpRequest无法加载http://isohunt.com/js/json.php?ihq=test.Access-Control-Allow-Origin不允许使用原始http:// localhost:8888.** (3认同)