2012-07-03 39 views
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發送到「check_last_timer.php」,例如1,2,3 ... 10。問題是如何在成功函數中取回1,2,3 ... 10。每次運行for循環時,我都會得到最後一個產品ID爲10.獲取成功函數內變量的值

回答

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); 
      } 
     }); 
    }); 
} 
+0

這是一個很好的方式來做到這一點......我剛剛學到了一個新的教訓,謝謝Alnitak – Shades88

+0

@ Shades88是的,它比使用明確的額外關閉更好(恕我直言) – Alnitak

+0

所以這就是我們如何使用.each功能。非常感謝你。 –

0

這是因爲AJAX調用的名稱與異步相同。 for循環繼續排隊ajax調用,所以你將得到最後一個id爲10,因爲循環太快而且ajax調用需要時間才能完成。

你可以做的是發送product_id來請求。從服務器取回成功,然後進行處理

+0

感謝您的信息。我實際上已經用你提到的方式解決了問題。 –

+0

真的嗎?這很好,很樂意幫忙。那麼接受我的答案如何? ;) – Shades88