2012-04-12 25 views
4

如果是最新的,是否會發生調用堆棧溢出的問題?這是長輪詢的當前實施嗎?

,因爲它稱之爲自我無限遞歸

如果將發生這樣的問題,有沒有更好的實現?

function waitForMsg(){ 
    $.ajax({ 
     type: "GET", 
     url: "xxx.php", 
     async: true, 
     cache: false, 
     timeout: 600000, 
     success: function(data){ 
      handleFunction(data); 
      waitForMsg(); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      XMLHttpRequest.abort(); 
      waitForMsg(); 
     } 
    }); 
} 
+0

我不認爲你會有這個問題。它被編碼的方式,一次只有一個請求被激活。 – 2012-04-12 19:43:23

回答

1

我想這是一種遞歸的,但不是嚴格在目前情況下來看,因爲您要添加的匿名函數上則傳遞到AJAX功能的對象,而AJAX調用立即返回(它沒有做任何事情來評估這些功能)。當ajax最終成功或失敗時,無論需要調用哪個函數都是在一個全新的上下文中,具有不同的堆棧值和堆棧位置。

順便說一句,我不知道我明白XMLHttpRequest.abort();調用。到那時,XMLHttpRequest已經失敗了,所以放棄不應該是必要的(我會想!)。