0

我正在尝试从 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);

我到底在这里想念什么?

4

2 回答 2

2

很难用你的问题来判断这是否是唯一的问题,但看起来你有一个问题。如果数组索引为 0 - n 则长度返回 n+1 并且您的循环应该是

while(i < data["posts"].length) {

注意<而不是<=

于 2013-02-02T20:17:33.937 回答
0

我建议使用 for 循环并将整个返回数据块定义为单个集合,例如 data.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 有效,后端可以对变量 1 执行某些操作,并且后端会回显 reply1FromBackend 和 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();

那有帮助吗?

于 2013-02-02T20:28:42.980 回答