1

首先对不起我的英语,

我正在使用 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 语句放在donefail函数中,但它也不起作用

谁能帮我??

提前致谢

4

1 回答 1

1

我建议您在表单提交中使用错误处理,而不是在beforeSubmit. 回调beforeSubmit应该更好地用于客户端验证。

If the submit any data to the server during editing the Ajax request will be sent to the server. The server can validate the input data and return error message. It's important to place any HTTP error code in the server response in the case. You can use errorTextFormat callback of form editing to customize the error message displayed for the user based on the error response returned from the server.

于 2013-01-08T10:23:19.147 回答