我正在尝试从JSON对象中获取一系列字符串,并将它们连接成一个大字符串。对我来说,使用循环似乎很明显,在所述循环的每次迭代中添加每个新字符串。然而,当我实际插入它时,我得到了一些奇怪的错误。
TypeError: data.posts[i] is undefined
我通常会假设它不能像那样被调用(我是javascript的新手,所以我基于有根据的猜测基于此),但这里有一些奇怪的东西:我打印到firebug的日志包含完全是预期的信息。我可以忍受无法解释的错误,但是它不会在网页上显示组合字符串。
var data = JSON.parse(d);
var i = 0;
while(i <= data["posts"].length) {
messages += "<b>" + data["posts"][i]['nickname']
+ ":</b> - " + data["posts"][i]['content'] + "<br>";
i++;
console.log(messages);
}
console.log(messages);
$('.post1').html(messages);
我到底错过了什么?
答案 0 :(得分:2)
很难说你的问题是否这是唯一的问题,但看起来你有一个问题。如果数组索引为0 - n,则length返回n + 1,并且循环应为
while(i < data["posts"].length) {
请注意<
而不是<=
答案 1 :(得分:0)
我建议使用for循环并将整个返回数据块定义为单个集合,例如data。
并使用以下方法:
$.ajax(
{
// Post variable1 to url.
type : 'post',
url : 'urlToBackend,
dataType : 'json',
data :
{
'variable1' : 'theValue'
},
success : function(data)
{
var message;
var reply1;
var reply2;
for(var i = 0; i < data.length; i++)
{
reply1 = data[i].reply1FromBackend; // Assuming that reply1FromBackend was returned.
reply2 = data[i].reply2FromBackend; // Assuming that reply2FromBackend was returned.
message += reply1;
message += reply2;
}
// do something
},
complete : function(data)
{
// do something
}
});
所以你必须确保url是有效的,后端可以对variable1做一些事情,后端回复echo1FromBackend和replyFromBackend,如下所示:
// Receive the posted variable's value if it is set.
$variable1= isset($_POST['variable1']) ? $_POST['variable1'] : false;
// ... do something
$json[] = array
(
'reply1FromBackend' => 'yo',
'reply2FromBackend' => 'sup'
);
echo json_encode($json);
flush();
这有帮助吗?