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 ステートメントをdone関数とfail関数の中に入れようとしましたが、どちらも機能しませんでした

誰でも私を助けることができますか??

前もって感謝します

4

1 に答える 1

1

内に実装された追加のサーバー側検証ではなく、フォーム送信内でエラー処理を使用することをお勧めしますbeforeSubmit。コールバックは、クライアント側の検証beforeSubmitに使用することをお勧めします。

編集中にサーバーにデータを送信すると、Ajax リクエストがサーバーに送信されます。サーバーは入力データを検証し、エラー メッセージを返すことができます。この場合、サーバーの応答に HTTP エラー コードを含めることが重要です。フォーム編集のerrorTextFormatコールバックを使用して、サーバーから返されたエラー応答に基づいてユーザーに表示されるエラー メッセージをカスタマイズできます。

于 2013-01-08T10:23:19.147 に答える