2013-08-23 13 views
5

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

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(); 
}); 

私は私が得ることはありません最適化のトリックがあると思います。 ありがとうございます。

+0

キャンセルしていない場合は、まだ遅延がありますか? –

+0

私はそれらをキャンセルするよりずっと遅いです。 – M4nch4k

+0

あなたが最初に取り消しているものを送信せずにそのリクエストを送信した場合はどうなりますか?キャンセルされたリクエストは、あなたが問題を抱えている期間とは関係ありません。 –

答えて

3

は、サーバへのAJAXリクエストを開き、要求をキャンセルすると、キャンセルしないだろうという、あまりにも覚えておいてください検出サポートされていることでblurイベントサーバ上での処理からの要求であれば、単にブラウザが応答をリッスンするのを止めるだけです。サーバーは、切断されたajax要求が実行を終了するまで処理し続けます。この時点で、クライアントに応答を送信し、リッスンする人が見つからない場合、その時点で死亡します。

+1

これは大きなポイントです。サーバ側の言語がphpと同様のセッションを処理する場合にも当てはまります。 –

+0

また、ブラウザでのAJAXリクエストの制限は、4つのリクエストを行い、最後のリクエストが5番目のリクエストである場合、ブラウザの制限に応じて5番目のリクエストが他の4つのリクエストが完了するまでハングすることを意味する場合があります。 – Mark

関連する問題