jquery
2011-07-26 131 views 3 likes 
3

我有以下代碼。jquery每個不按預期工作

var last_id = ''; 
$('.products').each(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+last_id, 
     success: function(id){ 
      last_id = id; 
     } 
    }); 
}); 

我的問題是,我想從阿賈克斯成功最後插入的ID,並把它傳遞給阿賈克斯第二遍的時候顯示來電。 但現在它不能得到last_id並在第二次再次發送爲空字符串 但是,當我在ajax成功提醒它提醒最後的ID? 我怎樣才能實現它?

+0

這是因爲Ajax調用已經沒有下一個Ajax調用(2號)發送的時間返回。我不確定你將如何成功地做到這一點。 –

回答

2

它不起作用,因爲當您發送第二個請求時,第一個請求的響應尚未到達。這是因爲你發送的請求都是異步的,所以第二個請求不會等待第一個請求完成。這就是爲什麼第二次發送空字符串的原因。

發送同步請求的一種方法是將async選項設置爲false

轉到此link並搜索async選項以找到正確的解釋。

但是您應該注意,發送同步請求可能會暫時阻止瀏覽器,因爲它在執行其他操作之前會等待請求完成。

0

Ajax調用是否返回JSON數據?如果是這樣嘗試:

success: function(data){ 
     last_id = data.id; 
    } 

或類似的東西。

1

async:false在ajax函數選項中會有所幫助。 但我認爲你會錯誤的方式:)你不應該執行這麼多的Ajax查詢。

+0

我知道它錯了,但我需要它... – chhameed

1

$.ajax();是異步的,這意味着它從您的代碼中分離出來並在您的代碼繼續運行時立即執行。所以你所有的ajax調用幾乎在它們返回之前幾乎同時開始。您可以在params中使用'async': false,作爲ajax,但這可能會凍結瀏覽器,直到所有請求都完成爲止。

你可以解決這個問題通過等到回調,使異步下一個電話:

var last_id = '', count = 0; 
(function getId(){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+last_id, 
     success: function(id){ 
      last_id = id; 
      if(++count < $('.products').length) 
       getId(); 
     } 
    }); 
    }); 
})(); 

我想在您的情況可能會更好做一個請求,並有服務器使用Id的數組迴應JSON

0

,你必須等待每個AJAX

var pro=$('.products').lenght; 
last_id(0,""); 
function last_id(index,lastid){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+lastid, 
     success: function(id){ 
      if(index<pro.length){ 
      last_id(index+1,id); 
      } 
     } 
    }); 
}); 
} 
相關問題