2016-05-24 2 views
2

私はflotchartプラグインを使用しています。ユーザーがグラフをいつどこで表示するのかを知り、そのグラフ値に関するデータベースからより多くの情報を取得しようとしていました。複数のajaxリクエストを回避または停止する方法

たとえば、ユーザーが「24 May」のような日付に移動すると、ajaxコールが行われ、「24 May」のすべてのデータがdivに追加されます。

はここで今の問題は、私は、任意の日付にカーソルを移動するたびに、それはすぐに10-15要求のような複数のAjaxのリクエストを送信している私のコード

$("<div id='tooltip'></div>").css({ 
      position: "absolute", 
      display: "none", 
      border: "1px solid #fdd", 
      padding: "2px", 
      "background-color": "#fee", 
      opacity: 0.80 
}).appendTo("body"); 

$("#visitor-chart").on("plothover", function(event, pos, item) { 
    if (item) { 
    var x = item.datapoint[0].toFixed(2), 
     y = item.datapoint[1].toFixed(2); 
     if (typeof x !== 'undefined') { 
     $.get("/ajax/graph?param="+item.datapoint[0]).done(function(result){ 
      $("#graf").html(result); 
     }) 
     } 
     $("#tooltip").html(item.series.label + " of " + x + " = " + y) 
     .css({ 
      top: item.pageY + 5, 
      left: item.pageX + 5 
     }) 
     .fadeIn(200); 
    } else { 
    $("#tooltip").hide(); 
    } 
}); 

です。余分なajaxリクエストを避けるにはどうすればいいですか?

+0

文字「I」、自分自身を参照するときに、必ず大文字にしなければならないような何かを行うことができます。私はここでそれを修正しましたが、将来の質問でこれを認識してください。 –

答えて

1

ajax呼び出しが発生したかどうかを確認するフラグを関数の先頭に追加することで、これを行うことができます。ここにいくつかのsudoコードがありますが、明らかにあなたの例でこの作業をする必要があります。

var isAjaxing = false 
$().on("click", function(){ 
    if(isAjaxing) return; 
    isAjaxing = true; 

    $.ajax(url, function(){ 
     isAjaxing = false; 
    }) 
}) 

これは、ajax呼び出しが完了するまで機能をロックアウトします。

+0

ありがとうございました。 –

+0

解決済みの問題マークはありません。 –

0

this jQueryプラグインの使用をお勧めします。コードサンプルも含まれています。

あなたはこの

$("#visitor-chart").on("plothover", function(event, pos, item) { 
... 
    $.throttle(makeYourAjaxCallHere, 300) 
... 
}); 
+0

あなたは何を説明しましたが、あなたの答えが元の方が良い理由を説明できますか? – Randy

+0

Tomからの解決策は何も問題ありませんが、このプラグインはあなたのような場合に特に開発されました。あなたがそれを使用しているときに設定する複数のオプションがあり、ある時間が経過してフルコール通話間の時間を制御します。 –

関連する問題