2013-04-25 4 views
1

Я сделал вызов ajax с помощью функции jQuery.everyTime(). У меня есть поле со списком, в котором я выбираю некоторые имена графов и динамически вызывает функцию ajax, возвращает json и создает диаграмму в представлении каждые 10 секунд.Как остановить вызов ajax и запустить новый с новыми параметрами?

Все идет хорошо, но когда я выбираю другое имя графика и щелкаю по функции, у меня не только новый график, но и у меня есть старый (как запрос), поэтому каждый раз, когда я нажимаю новый (скажем, 8 имен), я бы получил 8 запросов одновременно и из последних будет показано (но если вы проверите firebug, вы увидите 8 запросов).

Это моя Аякса функция:

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

Я хотел бы, чтобы отменить previus АЯКС звонки без необходимости обновлять страницу. Могу ли я это сделать? например, положить какую-то «остановку» в самом начале функции, не знаю. Я видел решение 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.

+0

возможно дубликат [ABORt запросов Ajax с использованием JQuery] (http://stackoverflow.com/questions/446594/abort-ajax-requests-using-jquery) – Makoto

ответ

2

Смотрите этот ответ: Abort Ajax requests using jQuery

Создать переменную за пределами вашего everyTime, который хранит XHR, то остановить его перед выпуском нового.

var xhr; 

j("#hour").everyTime(10000,function(i){ 
    xhr && xhr.abort(); 
    xhr = j.ajax(); 
}); 
+0

почему вы добавляете двойную && там? xhr && xhr.abort(); или это была ошибка опечатки? не работал :(продолжает отправлять старые запросы ajax – msqar

+0

@msqar, если переменная xhr еще не имеет значения (при первом выполнении вашей функции 'everyTime'), вызов метода' abort() 'будет вызывать ошибка. Это просто быстрый способ убедиться, что есть объект, прежде чем пытаться прервать запрос. Можете ли вы изменить свой вопрос и поставить свой новый код внизу? ** Оставьте свой первый код для истории. ** – Travis

+0

Готовый помощник, Я обновил свой вопрос с помощью текущей функции. @Travis – msqar

Смежные вопросы