2011-08-07 53 views
1

我有一個文件,其中處理許多其他文件,可能需要長達30分鐘來處理。我對前端的文件做了一個AJAX請求。該文件輸出到另一個關於完成百分比的臨時文件。當它完成後,它會將成功消息作爲自己的XML輸出(而不是tmp文件)輸出。如何確保一個非常延遲的AJAX調用被正確讀取

我遇到的問題是,當處理時間很短的時候..說最多3分鐘,AJAX請求(通過jQuery製作)保持活着。但是當處理花費更長時間(4分鐘以上)時會發生超時。 AJAX連接被切斷。我如何阻止它並使其在瀏覽器關閉之前保持活躍狀態​​?

回答

1

你將無法做到這一點。除非它是慧星服務器,否則可以在服務器端保持連接處於活動狀態,並且當數據有任何更新時,會將內容推出。

在你的情況,我能想到的唯一的辦法是這樣做的:

function ajax_call() { 
$.ajax({ 
    url : 'get_file_processing_output.html', 
    success : function (response) { 
    check your response, if file processing is not finished, then call ajax_call() again 
    if it is finished, then just do whatever you need. 
    }, 
    timeout : function() { 
    time out then directly call ajax_call() again, maybe with a time interval would be better 
    } 
}) 
} 

我有一個成功的回調以上阿賈克斯,因爲我覺得你應該從你的服務器端的響應有事要告訴你的客戶端的處理尚未完成。

+0

does not calling it on on failure trigger my server page to do the again again?所以在這種情況下,我的get_file_processing_output.html應該完全不同於我執行的我更親密的腳本,因此它不會重疊 – footy

+0

然後在服務器端,您應該有一個標誌,指示該文件是否正在處理中,如果是的話,告訴客戶它仍在處理中。這也會阻止其他用戶加載頁面並觸發多個請求來處理文件。 – Shanison

相關問題