JQuery AJAX с интервалом

У меня есть вопрос о вызове AJAX в пределах интервала. И почему это не работает или работает так, как это работает.

У меня есть этот код (этот не работает)

setInterval($.ajax({
  //Place code here
}), 2000);

но тогда я делаю это так

setInterval(function() {
  $.ajax({
    //Do ajax stuff here
  });
}, 2000);

Теперь это работает, но мне кажется, что я только делаю дополнительную анонимную функцию.

Ответ 1

setInterval требуется функция или исполняемый код в строчном формате.

Первый вызов будет работать при вводе строки.

setInterval('$.ajax({ //Place code here })', 2000);

Использование этого синтаксиса не рекомендуется по тем же причинам, что и при использовании eval.

setInterval также может принимать необязательный список параметров. Вы можете воспользоваться этим фактом и использовать что-то вроде этого:

setInterval($.ajax/*a reference to the ajax function*/,
 2000, {url: 'someurl', success: onSuccess, error: onError}/*args passed to $.ajax*/
);

Обратите внимание, что это не будет работать для методов объектов, которые используют this для определения контекста, так как значение this будет привязано к window. То есть следующее не будет работать:

setTimeout($('h1').css, 1000, {'color': 'red'});

Ответ 2

setInterval требуется функция в качестве первого аргумента (Ссылка) и что почему setInterval($.ajax({ //Place code here }), 2000); не работает, поскольку функция $.ajax возвращает a jQuery XMLHttpRequest object (Ссылка)

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000); создает действительно анонимную функцию, но это необходимо, если вы не цитируете свой код, чтобы сделать его string.