首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >json未捕获SyntaxError:意外标记:

json未捕获SyntaxError:意外标记:
EN

Stack Overflow用户
提问于 2011-10-29 10:28:38
回答 4查看 134.6K关注 0票数 69

尝试调用并检索一个非常简单的、只有一行的JSON文件。

代码语言:javascript
复制
$(document).ready(function() {

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


  });//end document.ready

以下是原始请求:

代码语言:javascript
复制
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

这是原始的回应:

代码语言:javascript
复制
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就会进行验证。

你知道为什么我不能得到这个错误,而且我永远不会成功回调吗?

编辑-上面的jQuery.ajax()调用在jsfiddle.net上运行得很好,并如预期的那样返回警告‘成功’。

EDIT 2 -这个网址运行得很好,'http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json‘,我注意到它返回的类型是: text/javascript,Chrome没有抛出意外的标记。我已经测试了其他几个url,唯一没有抛出Unexptected令牌的url是作为TYPE: text/javascript返回的wunderground。

未正确解析作为text/plain和application/json返回的流。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-30 05:59:52

您已经告诉jQuery等待JSONP响应,这就是jQuery将callback=jQuery16406345664265099913_1319854793396&_=1319854793399部件添加到URL的原因(您可以在请求的转储中看到这一点)。

您返回的是JSON,而不是JSONP。你的回答看起来像这样

代码语言:javascript
复制
{"red" : "#f00"}

而jQuery的预期是这样的:

代码语言:javascript
复制
jQuery16406345664265099913_1319854793396({"red" : "#f00"})

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

如果同源策略对于您的应用程序来说不是问题,那么您只需要将jQuery.ajax调用中的dataType修复为json而不是jsonp

票数 130
EN

Stack Overflow用户

发布于 2016-11-24 20:58:24

在过去的几天里,我一直在试图自己弄清楚这一点。使用旧的json dataType会给您带来跨源问题,而将dataType设置为jsonp会使数据“不可读”,如上所述。因此,显然有两种解决办法,第一种对我不起作用,但似乎是一个潜在的解决方案,我可能做错了什么。这里对此进行了解释[ https://learn.jquery.com/ajax/working-with-jsonp/ ]。

我使用的方法如下: 1-下载ajax跨源插件[ http://www.ajax-cross-origin.com/ ]。2-在普通的jQuery链接下面添加一个脚本链接。3-在ajax函数中添加行"crossOrigin: true“。

可以开始了!下面是我的工作代码:

代码语言:javascript
复制
  $.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);
      }
    })

票数 4
EN

Stack Overflow用户

发布于 2012-07-18 20:51:45

我遇到了同样的问题,解决方案是将json封装在此函数中。

jsonp(

……你的儿子..。

)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7936610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档