我有以下JavaScript代碼遍歷頁面上的文本列表。它將文本字段中的文本作爲價格,通過AJAX GET將其發送到服務器,並從服務器獲取解析的雙重文件。如果任何退貨價格低於現有價格,則表單不應提交。jQuery Ajax Race Condition?
問題在於,由於Ajax調用的非阻塞即時響應性質,表單在所有AJAX請求完成之前提交。我需要設置一個wait()函數(或所有Ajax方法完成時的回調函數),但不知道如何使用jQuery來實現。
有什麼建議嗎?
// .submitForm is a simple button type="button", not type="submit"
$(".submitForm").click(function(e){
var submittable = validatePrices();
if (submittable) {
$("#myForm").submit();
}
});
function validatePrices() {
var submittable = true;
$(".productPrice").each(function(){
var $el = $(this);
$.ajax({
type: "POST",
url: "/get_price.jsp",
async: false,
dataType: "html",
data: "price=" + $el.val(),
success: function(data)
{
var price = new Number(data.split("|")[1]);
var minPrice = new Number($el.data("min-price"));
if (price < minPrice)
{
$el.addClass("error");
$(".dynamicMessage").show().addClass("error").append("<p>ERROR</p>");
submittable = false;
}
}
});
return submittable;
});
}
'e.preventDefault()' – Bergi 2013-03-07 17:18:52
對每個單獨的字段使用同步HTTP請求回到您的服務器將使您的網站非常緩慢。 – Pointy 2013-03-07 17:19:51
已更新帖子以闡明.submitForm不是type =「submit」,只是一個type =「button」,因此不需要e.preventDefault()。 – bluedevil2k 2013-03-07 17:25:05