0

簡単
に言えば、ユーザーが「OK」ボタンをクリックした後、非同期サーバー側の検証(AJAXを使用)を実行したいと考えています。検証に失敗した場合は、プロンプトを閉じずにエラー メッセージを表示したいと考えています。

詳細

Impromptu バージョン 3.1 を使用しています。3.1 のドキュメントが見つからなかったので、バージョン 4.0.1 のドキュメントで、これを行うには 2 つの方法があることを確認しました -

プロンプトを開いたままにするには、false または event.preventDefault() を返します

古いバージョンを使用しているため、このような関数内でイベント変数を使用できないことを確認しました-

$.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: submitCertificationPrompt } });

function submitCertificationPrompt(e,v,m,f)
{
 //e is not available in case of version 3.0.1
}

バージョン 3.1 プラグイン コードで行ったカスタマイズがいくつかあるため、現在最新バージョンにアップグレードできません。

だから、私はreturn false道を使うことを余儀なくされています。これが機能することを確認しました-

 $.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: submitCertificationPrompt } });

    function submitCertificationPrompt()
    {
       return false;
    }

しかし、AJAX応答が受信されるまで待たなければならないので、このようなjavascriptコールバック関数を使用してみましたが、期待どおりに動作しません -

$.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: function(){ submitCertificationPrompt(function(bool){ return bool; }) } });

function submitCertificationPrompt(callback)
{
    //I will do an AJAX call here and the prompt should stay open if the response reads validation error. So, I will callback false in that case

    callback(false);
}

助けてください...

4

2 に答える 2

1

以下のように ajax を呼び出しているところに、もう 1 つのパラメーター async: false を追加するだけで、小さな変更を加える必要があります。

 $.ajax(
                        {
                            type: 'POST',
                            url: '/Path/TestPost',
                            async: false,
                            data: form.serialize(),
                            success: function(data) {

}

詳細 : jquery Ajax/MVC 投稿の実行中に即席の「アップ」を維持する

于 2013-07-31T12:19:08.197 に答える
0

まあ、私はあなたが何をしているのかよくわかりませんが、 $.ajax がjQuery deferred インターフェイスを実装しているという事実を利用しています:

$.ajax({
    // the opts for the call.
    // see the documentation.
}).promise().then(function()
{
    // this gets executed when the ajax call comes back with an OK HTTP code like 200
    // perform console.log(arguments) here to see what you get.
}, function()
{
    // this gets executed when the ajax call comes back with an ERROR HTTP code like 500
    // perform console.log(arguments) here to see what you get.
}).always(function()
{
    // this gets always executed.
    // perform console.log(arguments) here to see what you get.
});
于 2012-09-20T15:46:32.977 に答える