4

Possible Duplicate:
return from jquery ajax call
jQuery: Return data after ajax call success

        $.ajax({
            url:"list.php",
            dataType: "json",
            success: function(resp){
                for(var i=0;i<resp.length;i++){
                    $('#goods_list').append(
                      "<h3>" + resp[i]["name"] + "</h3>"
                      +
                      "<div>Price: NT$" + resp[i]["price"] + "<br />"
                      +
                      resp[i]["description"]
                      +
                      "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More"
                      +"</div>"
                    );
                }

                var resp2 = resp;
            }
        });

        $('body').append(resp2[0]["price"]);

And FireBug said:

ReferenceError: resp2 is not defined
$('body').append(resp2[0]["price"]);

How can I use $.ajax success data in somewhere else? (outside the $.ajax function)

The concept is similar to "Global Variables".

4

1 に答える 1

0

単にsuccessコールバックの外でレスポンス コンテンツを使用したい場合は、次のようにメソッドの外で変数を宣言する必要があります。

var resp2;
$.ajax({
    url:"list.php",
    dataType: "json",
    success: function(resp){

        for(var i=0;i<resp.length;i++){

            $('#goods_list').append(
            "<h3>" + resp[i]["name"] + "</h3>"
            +
            "<div>Price: NT$" + resp[i]["price"] + "<br />"
            +
            resp[i]["description"]
            +
            "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More"
            +"</div>"
            );

        }

        var resp2 = resp;
    }
});

いずれにせよ、$.ajax 呼び出しの後のコードは、成功のコールバックの前に実行される可能性が非常に高く、ほぼ確実であることを覚えておく必要があります。これは非同期呼び出しであるため発生します。ブラウザーは $.ajax 呼び出しを実行し、2 番目のスレッドで応答を待ちます。要求が送信された直後に、次のステートメント (コードでは .append 呼び出し) が実行されます。

したがって、必要なものを実現するには、成功のコールバック内に .append 呼び出しを配置する必要があります。

于 2013-01-05T14:33:47.087 に答える