问题 jQuery AJAX的间隔


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

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

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

但后来我这样做了

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

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


1116
2017-10-01 12:31


起源

您需要提供要在每个间隔执行的函数。 $.ajax 不返回函数,因此它不起作用。 - Rory McCrossan
好问题@Rob!希望我的编辑将帮助您了解markdown的正确用法:)有一个 元帖子 这是一个专门用于发布帖子格式的沙箱 - 也许这也可以帮助你习惯降价。 - Lix
@Lix感谢编辑:) - Robbert Stevens


答案:


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

11
2017-10-01 12:34



您可以更改代码示例,以便它不会使用 eval?保持免责声明我没事。 - Halcyon
@FritsvanCampen,但兄弟,这是我帖子中唯一的示例代码。 - c.P.u1
谢谢回答 :) - Robbert Stevens
我想我喜欢这种方式比使用异常函数的方式更多:) - Robbert Stevens
这对我来说是新的。优秀。 - bluetoft


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

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000); 确实创建了一个匿名函数,但除非你引用代码使其成为一个函数,否则它是必要的 string


3
2017-10-01 12:36



谢谢回答 :) - Robbert Stevens