我一直在尝试基本上为通过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并追加。
我希望它更清楚。
答案 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]
。
修改强>
你在这一行上有语法错误(除了括号语法而不是点,你没有加号):
var newDiv = $("<div>" + results.1 + results.2 "</div>");
应该是
var newDiv = $("<div>" + results[1] + results[2] + "</div>");
确保您的回调是获取解析的 JSON对象,而不是原始JSON字符串。在回调中警告typeof json
,它应该说&#34; object&#34;。如果它说&#34; string&#34 ;,将dataType: 'json'
添加到传递给$.ajax
的选项对象,和/或确保服务器正在为响应设置正确的内容类型。
修复后,您的代码应该可以运行。请参阅this jsfiddle。
编辑2
.append
行应位于for
循环内,否则只有JSON上的最后一个结果会附加到div。请参阅updated fiddle。
你在评论中说:&#34;我要附加到一个类=&#34;容器&#34; DIV&#34 ;.但是您的代码表示您要附加ID为==&#34; chatContents&#34;的div。你有这样的div吗?
当您说警报停止工作时,这意味着在警报阻止其余脚本执行之前可能存在一些错误。检查Firebug的控制台是否有错误,并在警报之前仔细检查所有代码。