尝试进行呼叫并检索一个非常简单的一行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
这是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
这是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"}
响应中返回了JSON(红色:#f00),但Chrome报告了 Uncaught SyntaxError:Unexpected token: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的URL是作为类型返回的文坛:text / javascript。
以text / plain和application / json返回的流未正确解析。
您已经告诉jQuery期待JSONP响应,这就是jQuery将callback=jQuery16406345664265099913_1319854793396&_=1319854793399部分添加到URL的原因(您可以在请求的转储中看到它)。
callback=jQuery16406345664265099913_1319854793396&_=1319854793399
您返回的是JSON,而不是JSONP。您的回应看起来像
{"red" : "#f00"}
jQuery期望这样的事情:
jQuery16406345664265099913_1319854793396({"red" : "#f00"})
如果您实际上需要使用JSONP来绕过相同的原始策略,则服务的服务器colors.json需要能够实际返回JSONP响应。
colors.json
如果相同的原始政策对于您的应用程序来说不是问题,那么您只需dataType将jQuery.ajax调用中的改成json而不是即可jsonp。
dataType
jQuery.ajax
json
jsonp