【问题标题】:jQuery not parsing JSON properlyjQuery 没有正确解析 JSON
【发布时间】:2008-12-17 16:44:34
【问题描述】:

我有问题。我构建了一个脚本来向发送回响应的内部链接发出请求。脚本如下所示:

jQuery.get(callUrl, function(data) {
  console.log(typeof data);
  jQuery.each(data.items, function(i, item) {

    console.log(i);
  });
}, 'json');

服务器发回的响应如下所示:

{"items":[            
  {
   "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg",
   "id": "83",
   "gallery_id": "30",
   "username": "admin"
  }]
}

我的问题是当我解析“数据”时,它的类型总是字符串。我需要它成为一个对象,以便我可以查询它并用我的脚本解析它。为了解决问题,我尝试将我的脚本与 jQuery 文档页面上的示例进行比较:

http://docs.jquery.com/Ajax/jQuery.getJSON

这个页面上的请求和我的请求的主要区别在于它使用了getJSON方法。当我尝试将它与我的服务器的 url 一起使用时,我根本没有得到任何响应,所以这就是我选择 get 方法并将返回类型指定为“json”的主要原因。

我尝试过的另一件事:我查看了 jQuery 示例用来查找它发回的 Content-type 标头的 Flickr feed,我认为我的提要可能有错误的标头,而 Flickr 提要上就是这样:

Content-Type    application/x-javascript; charset=utf-8

这与我自己的提要中的标题完全相同。所以我很困惑。有谁知道为什么会这样?

【问题讨论】:

    标签: javascript jquery json ajax


    【解决方案1】:

    JSON 需要用括号括起来,所以应该是:

    ({"items":[            
      {
       "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg",
       "id": "83",
       "gallery_id": "30",
       "username": "admin"
      }]
    })
    

    然后您应该能够使用 getJSON,因为这是将数据作为对象获取的最简单方法。但是,您也可以 eval() 字符串,这将返回一个对象。

    【讨论】:

    • 如果他命中的端点不支持 JSONP,getJSON 可能无法正常工作。
    • 那是真正的单一语言,如何让我的内部服务器支持 JSONP?
    • 我在使用 eval() 并用括号包围返回对象时解决了这个问题。它现在也可以与 getJSON 一起使用。谢谢大家!
    【解决方案2】:

    您是否尝试过通过调用 JavaScript eval() 函数来构建该字符串的对象?如果您首先在回调函数中调用 eval(data),它应该会给您一个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2016-06-24
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多