2013-09-27 73 views
0

嗨,我有以下代码:。每个解析JSON返回undefined

$.ajax({'type':'POST', 'url':'https://www.123.com/site/gethistory', 
     'data':{'a': this.username, 'b': username}, 
     'success':function(history){ 
      alert(history); 
      var codes = jQuery.parseJSON(history); 
      $.each(codes, function(key, value) { 
       alert(key); 
      }); //each 
     }, 
     'error':function(){ 
     } 
     }); //ajax 

眼下的关键是不确定的。而我试图提醒(value.text),它仍然给我未定义。


历史警觉,因为这:

[{ “演示”:{ “文”: “喜 人”, “时间”: “1380167419”}, “管理员”:{ “text”:“hi”,“time”:“1380167435”},“demo”:{“text”:“this works flawless now。”,“time”:“1380167436”},文 “:” 我们正在 基本上是与这个工作/”, “时间”: “1380167443”}}]

+0

jquey版本用过吗? –

+0

@ArunPJohny 1.7.1 – jackhao

+0

你打开控制台并检查parseJSON是否抛出错误? – adeneo

回答

1

它在这个fiddle正常工作。但是,您的JSON存在问题。

虽然在语法上是正确的,它被构造为使得要返回一个对象的阵列具有多个属性的所有具有相同名称:

[ 
    { "demo":{ 
     "text":"hi man", 
     "time":"1380167419" 
    }, 
    "admin":{ 
     "text":"hi", 
     "time":"1380167435" 
    }, 
    "demo":{ 
     "text":"this works flawless now.", 
     "time":"1380167436" 
    }, 
    "demo":{ 
     "text":"we are basically done with this/", 
     "time":"1380167443" 
    } 
    } 
] 

每个连续demo将覆盖前一个所以你只会看到最后的demo属性。

+0

非常感谢您的帮助。我现在明白了这个问题! – jackhao

+0

但是,如何在不写入“value.demo.text”的情况下访问该项目?我可以写出“value.text”吗? – jackhao

+0

您不能使用'value.text',因为'text'不是'value'的属性:它是'demo'的一个属性。如果您需要访问所有'demo'属性,则需要更正JSON格式(服务器端修补程序),或者编写一个能够理解您特定数据格式的自定义JSON解析器。 – 2013-09-27 00:41:52

0

貌似有什么不对您的JSON。尝试提醒代码并确保解析的JSON格式正确,即键/值对

+0

我试过警报代码,但它只返回对象对象... – jackhao

+0

看到http://api.jquery.com/jQuery.parseJSON/你可以检查codes.demo codes.admin等... – avrono

+0

是啊,它看起来像它是在控制台中为null。 – jackhao

0

无需使用jQuery来解析JSON。只是var codes = JSON.parse(history)

$.each(codes, function(k, v){ 
    console.log(v) 
}); 
+0

'$ .parseJSON'更具可移植性,因为一些旧的浏览器没有'JSON.parse'。在这种情况下,'jQuery'提供了它自己的实现。 – Barmar