3

このコードは私が作成したものではないことに注意してください。既に配置されているシステムのプラグインを使用して、UI を変更しているだけです。

Ajax呼び出しが発生したときに特定の要素に読み込みアイコンを表示するために、blockUIを利用するプラグインを構築しています(はい、プラグインを使用してプラグインを構築する必要があります)が、これは特に、イベントが発生しalert()ない場合success()必要な応答が得られません。

この結果、火災のfadeOut() alertに呼び出す読み込みアイコンが表示されますが、これは私が望んでいることではありません。

作成中の関数を呼び出すときは$.post()、次のように、必要な設定とオプションをすべて渡します。

$.fn.startLoading({            
    element: $("div"),
    ajax: $.post('some.url',
    {
        //Ajax settings...
    }, function (response) {   //This is the success function, right?
            if (good) {
                //stuff
            }
            else
                alert("Bad!"); //This happens BEFORE fadeOut()
        }
    }, 'text')
    .error(function (msg) {
        alert('Worse error!');
    })
});

私のプラグインの関数は、次のoptionsように、これらすべてを 1 つのパラメーターとして受け取ります。

$.fn.startLoading = function (options) { ...

$.post()次に、次のように呼び出しにアクセスします。

if (options.ajax)
    ajax = options.ajax;

これは私が立ち往生しているところです。イベントがfadeOut()発生する前に発生することを確認する必要があります。プラグインで作成した変数をsuccess使用してこれを行うにはどうすればよいですか?ajax

4

1 に答える 1

1

簡単な方法の 1 つは、ajaxComplete、ajaxSuccess などを使用することですhttp://api.jquery.com/category/ajax/

これらは、jQuery 経由で送信されたすべての ajax リクエストを取得するグローバルな ajax ハンドラーです...そのため、そこにハンドラーを設定し、独自のコールバック要素などをホワイトリストに登録して、関係のないものを無視することができます。

私のテストでは、これらのグローバル ハンドラーは、特定の ajax 呼び出しのハンドラーの前に起動します。

于 2013-06-05T00:28:15.117 に答える