0

私のスクリプトは非常に奇妙に動作します。すべての値を取得しますが、警告してそれらを確認したい場合、最初の値は「未定義」であり、他の値は正しいです。しかし、アラートを作成しないと、すべての変数が「未定義」と表示されます。私のコード:

var arr = new Array();

function fetchData(){
    $.get("post.php", 
        function(data){ 
            arr.img = $(data).find("img").attr("src");
            arr.link = $(data).find("td:last a").attr("href");
            arr.title = $(data).find("td:last a:first b u").text();
            arr.post = $(data).find("td:last span").text();
        }
    );

}

// On page load fetch 4 times and make bar
for (i = 0; i < 4; i++){
    var str;
    fetchData();
    alert(arr.img);
    alert(arr.link);
    alert(arr.title);
    alert(arr.post);

    str = "<td><tr><td><a href='" + arr.link + "'><img src='" + arr.img + "' width='100' height='100' /></a></td></tr><tr><td><strong>" + arr.title + "</strong> - " + arr.post + "</td></tr></td>";

    $("div").append(str);
}
4

1 に答える 1

0

ループforは、応答を受信する前に実行されます。

最後の15回が機能する理由は、最初のアラートを閉じるまでに、応答が受信されているためです。

コールバックにアラートを配置すると、私が何を意味するかがわかります。

var arr = new Array();

function fetchData(){
    $.get("post.php", 
        function(data){ 
            arr.img = $(data).find("img").attr("src");
            arr.link = $(data).find("td:last a").attr("href");
            arr.title = $(data).find("td:last a:first b u").text();
            arr.post = $(data).find("td:last span").text();

            var str;
            alert(arr.img);
            alert(arr.link);
            alert(arr.title);
            alert(arr.post);

            str = "<td><tr><td><a href='" + arr.link + "'><img src='" + arr.img + "' width='100' height='100' /></a></td></tr><tr><td><strong>" + arr.title + "</strong> - " + arr.post + "</td></tr></td>";

            $("div").append(str);
        }
    );

}

// On page load fetch 4 times and make bar
for (i = 0; i < 4; i++){
            fetchData();
}
于 2010-05-19T20:00:07.713 に答える