まず、私の英語で申し訳ありませんが、
私はjqgridで作業しています。クライアントを管理するためのテーブルがあります。新しいクライアントを追加したい場合、 beforeSubmit イベントで ajax 検証を行って、クライアントが外部システムに存在するかどうかを確認します。この関数の最初のパラメーターはブール値です (true の場合、クライアントの追加の実行が続行され、false の場合は停止します)
beforeSubmit: function(postdata, formid) {
var form = formid[0];
var hostId = $.trim(form.HOSTID.value);
var document = $.trim(form.DOCUMENT.value);
var idMurex = $.trim(form.IDMUREX.value);
var success;
processClientData(hostId, document, idMurex).done(function() {
alert('OK');
success = true;
}).fail(function() {
alert('KO');
success = false;
});
return[success, ''];
},
ajax 関数は、クライアントが存在するかどうかを返します。クライアントが存在する場合、ユーザーがクライアント情報に同意するかどうかに応じて、続行するかどうかの確認ダイアログが表示されます。クライアントが存在しない場合は、エラー メッセージを示すアラート ダイアログが表示されます。
function processClientData(hostId, document, idMurex) {
var def = $.Deferred();
//SERVER RESPONSE IF EXISTS CLIENT
$.post('/watt/cambio_titularidad', {
oper: 'datos_cliente',
hostId: hostId,
document: document,
idMurex: idMurex
},
function(response){
//CLIENT EXISTS (SHOW CONFIRMATION DIALOG WITH CLIENT INFO)
if (response.success == true) {
$("#dialog_info_tablas").dialog({
title: "CLIENT EXISTS",
modal: true,
buttons: {
"Ok": function() {
$(this).dialog("close");
def.resolve();
}
"Cancel": function() {
$(this).dialog("close");
def.reject();
}
}
});
//CLIENT DOESN´T EXIST (SHOW ALERT DIALOG WITH ERROR MESSAGE)
} else {
$("#dialog_info_tablas").dialog({
title: "CLIENT NOT EXISTS",
modal: true,
buttons: {
"Ok": function() {
$(this).dialog("close");
def.reject();
}
}
});
}
},
"json")
return def.promise();
}
Deferred オブジェクトを使用して ajax 呼び出しを同期しようとしています。
問題は、var success が正しい値になる前に return ステートメントが実行されることです。同期する方法がわかりません。ユーザーがダイアログ ボタンをクリックするまで戻りを遅らせる必要があるため、クライアントの追加を続行するかどうかを判断します。return ステートメントをdone関数とfail関数の中に入れようとしましたが、どちらも機能しませんでした
誰でも私を助けることができますか??
前もって感謝します