私のアプリケーションでは、各サプライヤの前にあるチェックボックスと一緒にサプライヤを一覧表示するjQueryポップアップウィンドウがあります。ユーザーは各サプライヤのチェックボックスの1つをチェックし、削除ボタンを押すとサプライヤを削除することができます。ただし、ユーザーが削除ボタンをクリックすると、Ajaxコールはサーバー側に正しく送信され、サーバー側で適切にサプライヤーを削除します(削除されたサプライヤーはリストに表示されなくなります)。ユーザーが同じことをやり直すと、ポップアップウィンドウが2つのajaxリクエストをサーバー側に送信することに気付きました。ユーザが3回目にクリックすると、ポップアップウィンドウはajaxリクエストを3回送信します。ユーザーがポップアップフォームを送信すると、複数のajaxコールが送信されます
var ajaxURL = getFormAction('crm.web.SupplierManager',
'deleteSupplierRequestAjax');
$("#deleteBtnId").click(function(event) {
$("#supplierDeleteConfirmDivId").dialog("open");
$("#supplierPopupCancelBtnId").click(function(event) {
$("#supplierDeleteConfirmDivId").dialog("close");
event.preventDefault();
});
$("#supplierPopupOkBtnId").click(function(event) {
$("#supplierDeleteConfirmDivId").dialog("close");
$("#supplierPopupOkBtnId").mask("Waiting...");
$.ajax({
type: 'POST',
data: $("#formId").serialize(),
url: ajaxURL,
success: function (data) {
$("#supplierPopupOkBtnId").html(data);
$("#supplierPopupOkBtnId").unmask();
},
error: function(jQXHR, textStatus, errorThrown) {
$("#supplierPopupOkBtnId").unmask();
handleAjaxError(jQXHR, textStatus, errorThrown);
}
});
});
event.preventDefault();
});
私にとって、ユーザーが削除ボタンをクリックするたびに、ポップアップウィンドウにレンダリングが蓄積されているようです。本当の理由はわかりません。私は$("#formId").serialize()
が問題を起こしていると推測しています。誰もが別の考えがありますか?で
async:false、 –
を使用してみることができます。非同期:falseを使用しないでください。非推奨です。非同期コードが必要な場合は、「約束」を参照してください。 – Zenoo
ありがとう@Zenooこれはどうやって起こっているのですか? – nwGCham