首先对不起我的英语,
我正在使用 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函数中,但它也不起作用
谁能帮我??
提前致谢