2013-07-23 55 views
0

我想用jQuery編寫一個遞歸函數來調用發送電子郵件的php文件。電子郵件服務器一次發送10批次的電子郵件,我希望JS繼續發送GET,直到data.Finished == true。jQuery遞歸獲得等待結果

我的代碼如下:

function emailDespatchNotification() { 
    $.get('email.php', function(event) { 
    if (event.action.status == 'OK') { 
     if (event.data.Finished != true) { 
     emailDespatchNotification(); 
     } 
    } 
    }); 
} 

的JSON結果如下:

{ 
"log": {"SQL":{"0":"SELECT ...","1":"INSERT INTO ..."},"0":"Cache cleared","Page":"email.php","Script_Time":3.4495}, 
"data": {"Finished":false}, 
"action": {"status":"OK"}, 
"readable": {} 
} 

emailDespatchNotification()被稱爲首次代碼的行爲,因爲我希望它發送一個GET到服務器,但是當返回結果(包含data.Finished = false)時,JS不斷髮送GET請求到服務器,直到我停止它或瀏覽器報告錯誤。

我不明白爲什麼emailDespatchNotification()被連續調用,因爲只有在GET返回值時才應該調用它。我試圖將整個GET嵌套到一個命名函數中,並調用它而不是emailDespatchNotification(),但它沒有效果。在使用列表之前,我已經解決了這類問題,但我不知道需要多少次調用服務器,因此列表不合適。我正在使用jQuery 1.8.3並使用Firebug進行調試。

+0

@Joe他的代碼是在它應該是ajax回調,我不認爲這是問題。 –

+0

您是否驗證了ajax調用的結果以確保它符合您的期望?在調用'emailDespatchNotification();'的行上放置一個斷點可能會有幫助,並檢查事件對象。 –

+0

我已驗證ajax結果並通過JSONLint運行它,我已將示例結果添加到我的問題中。 – TheBeest

回答

0

我相信我已經通過在GET函數中添加了一個種子來解決了這個問題,雖然Cache-Control被設置爲no-store,no-cache它緩存了結果。

的適應代碼如下:

var seed = new Date()/1; 
$.get('beta/email.php', {seed:seed}, function(event) { 

這樣,我保證我得到的頁面的真人版,我的代碼執行罰款。

@Jason P感謝您的幫助!