Прекратить запуск запросов AJAX - PullRequest
0 голосов
/ 27 декабря 2011

Проблема лучше всего объясняется кодом:

var myinterval = setInterval(function() {
    $.ajax({
        data: data
        url: url,
        success: function(data) {
            if (data) { /* I want to clear current interval */ }
            else { /* let it firing ajax requests further */ }
        }
    });
}, 1000);

Итак, я хочу запускать ajax-запросы каждую секунду, чтобы проверить, изменился ли статус «что-то». И если это что-то изменилось правильно, я хочу перестать проверять это. По сути, я спрашиваю, как мне сделать это наилучшим и наиболее понятным способом.

То, что я делал раньше, уродливо:

window.x = {
  'debug' : document.location.host.indexOf('.ru') != document.location.host.length - 3
  };
var setItem = function(i,v) {
  if (window.x['debug'] && typeof window.x[i] != 'undefined' && typeof console != 'undefined' && window.x[i] != v)
    console.log('Value of item ' + i + ' has changed from ' + window.x[i] + ' to ' + v)
  window.x[i] = v
};
var getItem = function(i) {
  if (window.x['debug'] && typeof window.x[i] == 'undefined' && typeof console != 'undefined')
    console.warn('Value of item ' + i + ' is undefined (maybe was not set?)')
  return window.x[i]
};

Итак, да, я занял глобальный x здесь (это мое временное хранилище). Теперь я могу установить свой интервал var на x:

setItem('myinterval', myinterval);

внутри функции успеха я могу получить этот интервал:

getIntem('myinterval');

и остановите это:

clearInterval(getItem('myinterval'));

Но это действительно ужасно, не так ли? Какой лучший лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Просто используйте clearInterval(myinterval):

var myinterval = setInterval(function() {
    $.ajax({
        data: data
        url: url,
        success: function(data) {
            if (data) {
                clearInterval(myinterval);
            }
        }
    });
}, 1000);
0 голосов
/ 27 декабря 2011

Вы уже сохраняете ссылку на интервал в myinterval, так что не так с:

clearInterval(myinterval);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...