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。如您所见,我有一个 for 循环,每次运行时都会将 product_id 例如 1,2,3...10 发送到“check_last_timer.php”。问题是如何在成功函数中取回 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 调用,因此您将得到 last id 为 10,因为 for 循环太快并且 ajax 调用需要时间才能完成。

您可以做的是发送 product_id 请求。成功从服务器取回然后进行处理

于 2012-07-03T12:26:10.730 回答