11

我有一个关于间隔内的 AJAX 调用的问题。以及为什么它不起作用,或者以它的工作方式工作。

我有这个代码(这个不起作用)

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

但后来我这样做了

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

现在它可以工作了,但对我来说,这看起来我只做了一个额外的匿名函数。

4

2 回答 2

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'});
于 2013-10-01T12:34:58.823 回答
3

setInterval需要一个函数作为第一个参数(参考),这就是为什么setInterval($.ajax({ //Place code here }), 2000);不起作用,因为$.ajax函数返回一个jQuery XMLHttpRequest object (参考)

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000);确实创建了一个匿名函数,但除非您引用代码以使其成为string.

于 2013-10-01T12:36:15.013 回答