1

jQuery.everyTime() 関数を使用して ajax 呼び出しを行いました。いくつかのグラフ名を選択し、ajax 関数を動的に呼び出し、json を返し、10 秒ごとにビューにグラフを作成するコンボ ボックスを取得しました。

すべてうまくいきますが、別のグラフ名を選択して関数をクリックすると、新しいグラフだけでなく、古いグラフも (要求として) 取得したので、新しいグラフをクリックするたびに (みましょう8 つの名前を言う) 同時に 8 つのリクエストを取得し、最新のものが表示されます (ただし、firebug をチェックインすると、8 つのリクエストが表示されます)。

これは私のajax関数です:

var selected = $("#name_list :selected").val();

    $(".title_graph").text(selected);

    var j = jQuery.noConflict();
    j("#hour").everyTime(10000,function(i){
        j.ajax({
          type: "GET",
          url: "getchartdata?graphName=" + selected +"&subgroup=hour",
          cache: false,
          success: function(jsonData){
              var data = eval(jsonData);
              drawChart(data, data[0][0], data[0][1]);
          }
        })
    });

ページを更新せずに以前の ajax 呼び出しをキャンセルしたいと思います。私はそれを行うことができますか?関数の最初にある種の「停止」を置くなど、よくわかりません。ajaxName.abort() ソリューションを見てきましたが、必要なものに適用できないと思います。

前もって感謝します。

追加した:

これは、トラビスの提案で現在どのように見えるかです:

function getChartsByGraphName() {
    var selected = $("#name_list :selected").val();
    var ajaxCallHour;
    $(".title_graph").text(selected);

    var j = jQuery.noConflict();
    j("#hour").everyTime(10000,function(i){
        ajaxCallHour && ajaxCallHour.abort();
        ajaxCallHour = j.ajax({
          type: "GET",
          url: "getchartdata?graphName=" + selected +"&subgroup=hour",
          cache: false,
          success: function(jsonData){
              var data = eval(jsonData);
              drawChart(data, data[0][0], data[0][1]);
          }
        })
    });
    }

しかし、まだ古い ajax リクエストを送信しています。

4

1 に答える 1

2

この回答を参照してください: jQuery を使用して Ajax リクエストを中止する

xhr を格納する変数を外部に作成everyTimeし、新しい変数を発行する前にそれを停止します。

var xhr;

j("#hour").everyTime(10000,function(i){
    xhr && xhr.abort();
    xhr = j.ajax();
});
于 2013-04-25T20:25:37.427 に答える