未捕获的json语法错误:意外的标记:
尝试拨打电话并检索一个非常简单的一行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:意外的令牌: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的地方就是作为TYPE:text / javascript返回的wunderground。
Streams以text / plain和application / json的形式被正确解析。
你已经告诉jQuery希望得到一个JSONP响应,这就是为什么jQuery已经在URL中添加了callback=jQuery16406345664265099913_1319854793396&_=1319854793399
部分(你可以在请求的转储中看到这一部分)。
你要返回的是JSON,而不是JSONP。 你的回答看起来像
{"red" : "#f00"}
和jQuery期待的是这样的:
jQuery16406345664265099913_1319854793396({"red" : "#f00"})
如果实际上需要使用JSONP来解决相同的原始策略,那么提供colors.json
的服务器需要能够实际返回JSONP响应。
如果相同的原始策略对您的应用程序不是问题,那么您只需要将jQuery.ajax
调用中的dataType
修复为json
而不是jsonp
。
我花了最近几天试图自己弄清楚这一点。 使用旧的json dataType可以解决跨源问题,而将dataType设置为jsonp会使数据“无法读取”,如上所述。 所以显然有两种方法,第一种方法不适合我,但似乎是一个潜在的解决方案,我可能做错了什么。 这在这里解释[https://learn.jquery.com/ajax/working-with-jsonp/]。
为我工作的人如下:1-下载ajax cross origin插件[http://www.ajax-cross-origin.com/]。 2-在正常的jQuery链接下添加一个脚本链接。 3-将“crossOrigin:true”行添加到您的ajax函数中。
很好去! 这里是我的工作代码:
$.ajax({
crossOrigin: true,
url : "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.86,151.195&radius=5000&type=ATM&keyword=ATM&key=MyKey",
type : "GET",
success:function(data){
console.log(data);
}
})
我遇到了同样的问题,解决方案是将json封装在这个函数中
JSONP(
....你的json ...
)
链接地址: http://www.djcxy.com/p/45941.html