2011-08-07 22 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

相关问题