0

JSON オブジェクトから一連の文字列を取得し、それらを 1 つの大きな文字列に連結しようとしています。ループを使用するだけで、ループの繰り返しごとに新しい文字列を追加することは明らかでした。ただし、実際にプラグインすると、奇妙なエラーが発生します。

TypeError: data.posts[i] is undefined

私は通常、そのように呼び出すことはできないと想定します (私は JavaScript を初めて使用するので、これの多くは経験に基づいた推測に基づいています)。しかし、ここに奇妙なことがあります。情報。原因不明のエラーに耐えることができましたが、Web ページに結合された文字列が表示されません。

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

これが唯一の問題であるかどうかを質問で判断するのは難しいですが、1 つの問題が発生しているようです。配列のインデックスが 0 ~ n の場合、長さは n+1 を返し、ループは次のようになります。

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

<であり、ではないことに注意してください<=

于 2013-02-02T20:17:33.937 に答える
0

for ループを使用し、返されたデータのブロック全体を 1 つのセット (データなど) として定義することをお勧めします。

そして、次の方法を使用します。

$.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 に答える