7

現在、jQueryイベントのキープレスでデータベース内のアドレスを取得するツールを使用しています。テキスト入力がフォーカスを失うと、保留中のリクエストをすべてキャンセルして、ユーザーが入力を完了した後にドロップダウンが表示されないようにします。すべてが正常に機能しますが、最後にフォームの次のステップに進むための最終 ajax リクエストを送信します。このリクエストは、これらのリクエストをすべてキャンセルする前よりもはるかに遅くなりました。キャンセルされたリクエストが保留中のリクエストに影響を与えてはならない理由がわかりません(クロムツールのネットワークタブで確認すると、キャンセルされていると確信しています)。私はこのコードを使用しています:

jQuery.xhrPool = [];
jQuery.xhrPool.abortAll = function() {
    jQuery(this).each(function(idx, jqXHR) {
        jqXHR.abort();
        jQuery('.loader').hide();
    });
};

jQuery.ajaxSetup({
    beforeSend: function(jqXHR) {
        jQuery.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = jQuery.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            jQuery.xhrPool.splice(index, 1);
        }
    }
});

jQuery('#my_input').blur(function(){
    jQuery.xhrPool.abortAll();
});

私が得られない最適化のトリックがあると思います。助けてくれてありがとう。

4

2 に答える 2

6

サーバーへの AJAX リクエストを開いてからリクエストをキャンセルしても、サーバーでのリクエストの処理はキャンセルされず、ブラウザーが応答をリッスンするのを停止するだけであることにも注意してください。サーバーは、切断された ajax リクエストを実行が完了するまで処理し続けます。実行が完了すると、クライアントに応答を送信しようとし、誰もリッスンしていないことがわかり、停止します。

于 2014-04-07T19:49:52.383 に答える