2012-05-22 92 views
4

當我不想從服務器返回響應時,是否有正確的方法來進行AJAX調用?我希望服務器保存一些數據,但客戶端不需要響應。如果服務器從不響應,AJAX連接是否會保持打開狀態,等待響應直至超時?正確的方法來進行不需要響應的AJAX調用?

我會使用JavaScript,如下所示。這是一個典型的AJAX調用,除了我遺漏了xmlhttp.onreadystatechange事件。

function SaveLabel() 
{ 
    var xmlhttp = null; 
    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else { 
     alert('Your browser does not support this feature.'); 
     return; 
    } 

    xmlhttp.open('GET', 'mypage.aspx?label=1'); 
    xmlhttp.send(null); 
} 

我發現了一個類似的問題,但它並沒有真正回答我:Does Ajax connection disconnect at some point?

+4

無論如何,你可能會想要得到一個響應 - 永遠不要假設遠程調用已經成功。如果你這樣做,有一天它會失敗並咬你。 –

+1

如果您從未得到2XX響應,您將如何知道服務器保存了數據?如果有401狀態會怎麼樣?或404?或500? – curioustechizen

+0

http://viralpatel.net/blogs/category/ajax - 看看這個 –

回答

5

你需要保持連接,直到服務器用它做,不管你是否不希望(或將會或不會)來自服務器的回覆。

原因是,如果客戶端在腳本執行完成之前斷開連接,大多數Web服務器都會終止請求。

服務器不必像回報數據那樣「回覆」,只需要「返回」即可。

即回答您的問題「Ajax連接在某些時候斷開嗎?」:是的,當服務器終止連接時。

所以你需要做的是確保你的ASP(X)腳本一結束它的工作就終止。不要讓它永遠運行,將數據傳遞給助手守護進程/服務等,這將需要長時間運行的處理。

+0

因此,在服務器上做類似Response.End的事情會立即關閉連接?我的目標僅僅是在可能有很多AJAX調用的情況下,保存客戶端處理用戶不需要知道的響應。 – NJS

1

xmlhttp.onreadystatechange只是XHR對象的一個​​事件,您可以在其中附加偵聽器來偵聽其狀態變化。這是在頁面上添加按鈕並添加處理程序的代名詞。

它有或沒有處理程序(AJAX仍然調用,該按鈕仍然可點擊)做同樣的事情。唯一的區別是你不知道發生了什麼(你不知道AJAX是否成功/失敗,你不知道按鈕被點擊的時間)。

相關問題