2013-10-01 3 views
11

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

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

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

, но тогда я сделать это таким образом

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

Сейчас он работает, но мне это выглядит как я только сделать дополнительная анонимная функция.

+2

Вам необходимо предоставить функцию, которая будет выполняться на каждом интервале. '$ .ajax' не возвращает функцию, поэтому она не работает. –

+0

Отличный вопрос @Rob! Надеюсь, мои правки помогут вам понять правильное использование markdown :) Существует [мета-сообщение] (http://meta.stackexchange.com/questions/3122/formatting-sandbox), которая является выделенной песочницей для игры с сообщением формат - возможно, это также поможет вам привыкнуть к уценке. – Lix

+2

@Lix спасибо :) –

ответ

11

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'}); 
+1

Не могли бы вы изменить образец кода, чтобы он не использовал 'eval'? Я в порядке, сохраняя отказ от ответственности. – Halcyon

+0

@FritsvanCampen, но bro, это единственный пример кода в моем сообщении. –

+0

Спасибо за ответ :) –

3

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

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

+0

Спасибо за ответ :) –

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