2009-07-15 1 views
3

ブラウザが以前のリクエストをフェッチしているときに、新しいajaxリクエストを防止する方法を教えてください! 私はこのようなデータテーブルを含むシステムを作成します:新しいリクエストを防止するjQueryで前のリクエストをフェッチするとき

col1 | col2 | col3 data1 |データ2 | data3

私はマウスオーバーイベントのデータに関する詳細情報を取得するためにAjaxを使用しましたが、ユーザーがデータ列のカーソルをすばやく移動すると複数のリクエストが作成されました。どのように私はそれを防ぐのですか?

答えて

2

jquery ajaxリクエストオブジェクトをキャッシュして後で中止することができると思います。

var xhr = $.ajax({...}); 

xhr.abort(); 
+0

目的は、防止することであり、中止しないことです。 – montrealist

1

Ben Nadelには、同じタイプの複数のリクエストのチェックを含むAJAXエラーを処理するための素晴らしいパターンがあります。

His blog postがお手伝いします。

+0

それは良いアイデアですが、私の解決策を解決することはできません:)とにかくタンク! – mehdi

0

あなたのケースでは、マウスオーバーとAJAXリクエストの間に少しの遅延が必要です。まず、AJAXリクエストのsetTimeoutを実行します。このタイムアウト中に別のマウスオーバーが発行された場合でも、タイムアウトをクリアして新しいタイムアウトを設定します。ここで

は簡易版である(あなたはすべての要素のハンドラと同じ機能のcell_onmouseoverを使用すると仮定し

var timeoutId = null; //Should be visible to both functions. 
function cell_onmouseover() 
{ 
    if (timeoutId) 
    { 
     clearTimeout(timeoutId); 
     timeoutId = null; 
    } 
    timeoutId = setTimeout(callAJAX, 500); //half a second delay. 
} 

function callAJAX() 
{ 
    //dostuff 
} 

[編集]:あなたはまた、ときにユーザー進行中のAJAX呼び出しを中止するために、これを向上させることができます新しい要素にマウスを合わせる

関連する問題