2012-12-13 45 views
0

停止用戶我有多個AJAX在each聲明經歷:jQuery的AJAX從能夠改變

$('.product').each(function() { 
     var product = $(this).attr('data-product'); 
     $.ajax({ 
      url:"/ajax/product", 
      data:"lookup=" + product, 
      success: function() { /* callback */ } 
     }); 
}); 

目前在each環5種款產品。

我的問題是,用戶無法按形式submit按鈕,直到所有這些AJAX查找已經完成;由於調用外部API,ajax調用每次都需要一些時間來處理。更具體地說,他們可以按submit按鈕,但直到所有的AJAX功能似乎已經完成了它不會做任何事情。

我怎樣才能使Ajax調用揮發性/不等待迴應,如果用戶想提交表單?

回答

1

你應該利用setTimeout()這將使調用在不同的線程發生。

$('.product').each(function() { 
     setTimeout(function() { 
     var product = $(this).attr('data-product'); 
     $.ajax({ 
      url:"/ajax/product", 
      data:"lookup=" + product, 
      success: function() { /* callback */ } 
     }); 
    }); 
}); 

jQuery.deferred允許其中代碼被異步執行類似的功能。

0

你可以只通過一個回調到你的函數,處理數據時,它已準備就緒:

myFunction: function(callback) { 
    $.get(myUrl, function(data) { 
     callback(data); 
    }); 
} 

或者你可以嘗試做這樣的:

$('.product').each(function() { 
     var product = $(this).attr('data-product'); 
     $.ajax({ 
      url:"/ajax/product", 
      data:"lookup=" + product, 
      async:true, 
      success: function() { /* callback */ } 
     }); 
}); 
0

您的用戶可以按隨時隨地submit按鈕,它會做它應該做的 - 這是提交表單裏面的一切。

您需要做的事情是在啓動AJAX請求之前/之後填充包含提交按鈕的表單,但不在回調中。

這樣用戶可以隨時點擊submit按鈕他/她想要的。