解析Json列表并追加

时间:2012-02-14 16:54:15

标签: jquery ajax json loops append

我一直在尝试基本上为通过ajax返回的json列表的每一行创建一个div,它将附加到主div #chatcontents。但是,我遇到了正确语法的问题。我认为错误是我的json被退回的方式。

这是在index.php中执行ajax调用的函数

function returnValue()
{
 $.ajax({
            async: true,
            type: "GET",
            url: "thread.php",
            data: {lastposted : dateposted},

            success: function (json) {
                if(json)
                {
                for (var i = 0, len = json.length; i < len; ++i) {
                var results = json[i];
                var newDiv = $("<div>" + results.1 + results.2  "</div>");
                }

                   $('#chatContents').append(newDiv);             
                }
            }  
        });
}

thread.php返回像这样的Json结果..

[{"0":"something","1":"41234","2":"test"},
{"0":"somethingmore","1":"2131","2":"test2"}]

我在网上看到的代码似乎返回了密钥,但我的代码是数字(0,1,2)。我认为它有我返回数组的方式。它是一个2d数组,转换为JSON。我不确定这是否导致了如何在第一页中循环数组的问题。任何帮助将不胜感激。

更清晰的照片: thread.php有这段代码:

<META HTTP-EQUIV="Refresh" CONTENT="3">
<?php
$latestmsgs = retrieveNewMsgs($lastpost,$currtime);
  ?>

 <?php echo json_encode($latestmsgs);?>

基本上,thread.php每3秒刷新一次。 Index.php对此页面进行ajax调用,并以json的形式检索最新的msg并追加。

我希望它更清楚。

2 个答案:

答案 0 :(得分:1)

你的thread.php正在返回一个JSON字符串数组......你需要循环数组,然后解析每个字符串以获取对象。

for (var i = 0, len = json.length; i < len; ++i) {
  var results = JSON.parse(json[i]);
  var newDiv = $("<div>" + results['1'] + results['2']  "</div>");
}

答案 1 :(得分:0)

我认为results.1语法无效,您应该使用results[1]

修改

  1. 你在这一行上有语法错误(除了括号语法而不是点,你没有加号):

    var newDiv = $("<div>" + results.1 + results.2  "</div>");
    

    应该是

    var newDiv = $("<div>" + results[1] + results[2] + "</div>");
    
  2. 确保您的回调是获取解析的 JSON对象,而不是原始JSON字符串。在回调中警告typeof json,它应该说&#34; object&#34;。如果它说&#34; string&#34 ;,将dataType: 'json'添加到传递给$.ajax的选项对象,和/或确保服务器正在为响应设置正确的内容类型。

  3. 修复后,您的代码应该可以运行。请参阅this jsfiddle

  4. 编辑2

    1. .append行应位于for循环内,否则只有JSON上的最后一个结果会附加到div。请参阅updated fiddle

    2. 你在评论中说:&#34;我要附加到一个类=&#34;容器&#34; DIV&#34 ;.但是您的代码表示您要附加ID为==&#34; chatContents&#34;的div。你有这样的div吗?

    3. 当您说警报停止工作时,这意味着在警报阻止其余脚本执行之前可能存在一些错误。检查Firebug的控制台是否有错误,并在警报之前仔细检查所有代码。