为什么我不能使用jQuery.parseJSON(json)解析json字符串?

时间:2012-08-31 08:17:40

标签: javascript json jquery

我正在尝试解析一个字符串的响应,这是一个json字符串。在我的网络应用程序的另一页面中,代码运行正常。但它不适用于我正在使用的当前页面。以下是代码:

 $.ajax({
    type: 'POST',
    url: 'http://mywebapp.com/sendnames',
    data: {},
    success: function(result) {
        alert('result: '+result);
        var obj = jQuery.parseJSON(result);
        alert('obj: '+obj);

    // doing rest of stuff  
    }

});

第一个警报到来并显示正确的结果。结果是:

 [
   "Richard",
   "Eric",
   "John"
 ]

但第二次警报没有到来。 我查了一下,它是一个有效的json。为什么我不能用jQuery.parseJSON()解析这个json。提前谢谢。

4 个答案:

答案 0 :(得分:2)

尝试添加返回类型:dataType:json

$.ajax({
        type: 'POST',
        url: 'http://mywebapp.com/sendnames',
        data: {},
        dataType:'json',
        success: function(result) {
          console.log('result: '+result);        
        // doing rest of stuff  
        }

    });

“json”:
将响应评估为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。) “jsonp”:使用JSONP加载JSON块。添加额外的“?callback =?”到URL的末尾以指定回调。通过将查询字符串参数“_ = [TIMESTAMP]”附加到URL来禁用缓存,除非缓存选项设置为true。 http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:1)

$.ajax替换为$.getJSON。这保证在内部触发$.parseJSON,因此result已经是所需的JS对象。

$.getJSON({
   type: 'POST',
   url: 'http://mywebapp.com/sendnames',
   data: {},
   success: function(obj) {
      alert('obj: '+obj);
      // doing rest of stuff  
   }
});

答案 2 :(得分:0)

尝试添加dataType:'text',它会返回字符串作为结果。并且您的代码将按预期运行。

答案 3 :(得分:0)

See the accepted answer here

  

你正在解析一个对象。你解析字符串,而不是对象;   jQuery.parseJSON只接受字符串。

由于$.ajax已经解析了数据,result是Javascript对象而不是字符串。 parseJSON需要一个字符串参数。

FROM DOCS(更多关于.ajax() data types here):

  

json类型将获取的数据文件解析为JavaScript对象   返回构造的对象作为结果数据。为此,它使用   浏览器支持jQuery.parseJSON();否则它使用了   函数构造函数