我对一个区间内的AJAX调用有疑问。为什么它不起作用,或以它的工作方式工作。
我有这个代码(这个不起作用)
setInterval($.ajax({
//Place code here
}), 2000);
然后我就这样做了
setInterval(function() {
$.ajax({
//Do ajax stuff here
});
}, 2000);
现在它可以工作,但对我来说,这看起来我只是做了一个额外的匿名函数。
答案 0 :(得分: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 :(得分:3)
setInterval
需要一个函数作为第一个参数(Reference),这就是setInterval($.ajax({ //Place code here }), 2000);
不起作用的原因,因为$.ajax
函数会返回jQuery XMLHttpRequest object
(Reference)
setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000);
确实创建了一个匿名函数,但除非您引用代码使其成为string
,否则这是必要的。