json未捕获的SyntaxError:意外的标记:
尝试拨打电话并检索一个非常简单的一行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报告未捕获的SyntaxError:意外的标记:colors.json:1
如果我直接导航到url本身,则返回JSON并显示在浏览器中。
如果我将colors.json的内容粘贴到JSLINT中,那么json将进行validation。
任何想法,为什么我不能得到这个错误,我从来没有成功的callback?
编辑 – 上面的jQuery.ajax()调用在jsfiddle.net上运行完美,并按预期方式返回警告“成功”。
编辑2 – 这个URL工作正常“http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json”我注意到,它返回为TYPE:文本/ JavaScript和Chrome没有扔意外的令牌。 我已经testing了几个其他的url,只有一个不会抛出Unexptected Token的url是以TYPE:text / javascriptforms返回的wunderground。
以text / plain和application / json的forms返回的stream没有正确parsing。
你已经告诉jQuery期待一个JSONP响应,这就是为什么jQuery已经添加了callback=jQuery16406345664265099913_1319854793396&_=1319854793399
部分的URL(你可以看到这在你的转储请求)。
你要返回的是JSON,而不是JSONP。 你的回答看起来像
{"red" : "#f00"}
和jQuery期待这样的事情:
jQuery16406345664265099913_1319854793396({"red" : "#f00"})
如果实际上需要使用JSONP来解决相同的源策略,那么提供colors.json
的服务器需要能够实际返回JSONP响应。
如果相同的原始策略对于您的应用程序不是问题,那么您只需要将jQuery.ajax
调用中的dataType
修复为json
而不是jsonp
。
我花了几天的时间试图自己弄清楚这一点。 使用旧的JSON数据types给你跨越原点问题,而设置dataType为JSONP使数据“不可读”,如上所述。 所以显然有两个出路,第一个没有为我工作,但似乎是一个潜在的解决scheme,我可能做错了什么。 这在这里解释[ https://learn.jquery.com/ajax/working-with-jsonp/ ]。
为我工作的人如下:1-下载ajax十字架插件[ 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); } })
这个hex可能需要用引号括起来,并做成一个string。 Javascript可能不喜欢#字符
我有同样的问题,解决的办法是在这个函数内封装JSON
JSONP(
….你的json …
)