2013-10-01 71 views
11

我有一個關於間隔內AJAX調用的問題。它爲什麼不起作用,或者按照它的工作方式工作。帶間隔的jQuery AJAX

我有這樣的代碼(這一個不工作)

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

但後來我讓這樣

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

現在它的工作原理,但對我來說,這看起來就像我只能讓一個額外的匿名功能。

+2

您需要提供在每個間隔上執行的功能。 '$ .ajax'不返回函數,因此它不起作用。 –

+0

偉大的問題@Rob!希望我的編輯能幫助你理解Markdown的正確用法:)有一個[meta post](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,但兄弟,這是我的帖子中唯一的示例代碼。 –

+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

感謝您的回答:) –