ページ上のテキストフィールドのリストを反復処理する以下のJavaScriptコードがあります。テキストフィールドのテキストを価格として受け取り、AJAX GETを介してサーバーに送信し、解析されたdoubleをサーバーから取得します。返品された価格のいずれかが既存の価格よりも低い場合、フォームは送信しないでください。
問題は、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;
});
}