1
function check_timer(){
    //get product ids
    var product_ids= document.getElementsByClassName("product_id");
    //create for loop
    for(var i=0; i<product_ids.length; i++){
        var product_id= product_ids[i].innerHTML;

        $.ajax({
            //send product id to check
            url: "check_last_timer.php",
            type: "post",
            data: {product_id: product_id},
            success: function(end_time){
                //trying to get product_id here

                //$("#timer"+product_id).html(end_time);
            }
        })

    }

}

成功関数内で製品 ID を取得しようとしています。ご覧のとおり、実行するたびに、1,2,3...10 などの product_id を「check_last_timer.php」に送信する for ループがあります。問題は、成功関数内で 1,2,3...10 を取得する方法です。for ループが実行されるたびに、最後の製品 ID である 10 を取得します。

4

2 に答える 2

1

クロージャーの外部で宣言されたループ変数を、そのクロージャー内から使用することはできません。

jQuery を使用しているので、以下を使用し.eachます。

function check_timer() {
    $('.product_id').each(function() {
        var product_id = this.innerHTML;  // or $(this).html()
        $.ajax({
            //send product id to check
            url: "check_last_timer.php",
            type: "post",
            data: {product_id: product_id},
            success: function(end_time){
                $("#timer" + product_id).html(end_time);
            }
        });
    });
}
于 2012-07-03T12:28:44.167 に答える
0

これは、AJAX 呼び出しがその名の通り非同期であるためです。for ループは ajax 呼び出しをキューに入れ続けます。そのため、for ループが速すぎて ajax 呼び出しが完了するまでに時間がかかるため、最後の ID は 10 になります。

できることは、product_id をリクエストに送信することです。サーバーから正常に取得し、処理を行います

于 2012-07-03T12:26:10.730 に答える