Php 如何确保正确读取非常延迟的AJAX调用

Php 如何确保正确读取非常延迟的AJAX调用,php,jquery,xml,ajax,file-processing,Php,Jquery,Xml,Ajax,File Processing,我有一个文件可以处理许多其他文件,可能需要30分钟才能处理。我对前端的文件执行AJAX请求。该文件将根据完成百分比输出到另一个临时文件。当它完成时,它会输出一条成功消息作为自己的XML输出(而不是tmp文件) 我遇到的问题是,当处理时间很小时。。假设最多3分钟,AJAX请求(通过jQuery发出)保持活动状态。但当处理时间较长(超过4分钟)时,会发生超时。AJAX连接被切断。如何防止它并使其在浏览器关闭前保持活动状态?您将无法做到这一点。除非是comet服务器,它可以在服务器端保持连接的活动状态

我有一个文件可以处理许多其他文件,可能需要30分钟才能处理。我对前端的文件执行AJAX请求。该文件将根据完成百分比输出到另一个临时文件。当它完成时,它会输出一条成功消息作为自己的XML输出(而不是tmp文件)


我遇到的问题是,当处理时间很小时。。假设最多3分钟,AJAX请求(通过jQuery发出)保持活动状态。但当处理时间较长(超过4分钟)时,会发生超时。AJAX连接被切断。如何防止它并使其在浏览器关闭前保持活动状态?

您将无法做到这一点。除非是comet服务器,它可以在服务器端保持连接的活动状态,并且当数据有任何更新时,它会推出内容

在你的情况下,我能想到的唯一方法是:

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
  }
})
}

我在上面的ajax中成功地回拨了一个电话,因为我觉得您应该从服务器端响应一些信息,告诉客户端处理尚未完成。

您将无法这样做。除非是comet服务器,它可以在服务器端保持连接的活动状态,并且当数据有任何更新时,它会推出内容

在你的情况下,我能想到的唯一方法是:

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
  }
})
}

我在上面的ajax中成功地回拨了一个电话,因为我觉得您应该从服务器端响应一些信息,告诉客户端处理尚未完成。

如果失败,是否再次调用它会触发我的服务器页面再次进行处理?所以在这种情况下,我的get_file_processing_output.html应该与我以前执行的脚本完全不同,我想这样它就不会重叠。然后在服务器端,您应该有一个标志,指示该文件是否正在处理中,如果是,告诉客户端它仍在处理中。这也将防止其他用户加载页面并触发多个处理文件的请求。失败时再次调用该页面是否会触发我的服务器页面再次进行处理?所以在这种情况下,我的get_file_processing_output.html应该与我以前执行的脚本完全不同,我想这样它就不会重叠。然后在服务器端,您应该有一个标志,指示该文件是否正在处理中,如果是,告诉客户端它仍在处理中。这也将防止其他用户加载页面并触发多个请求来处理文件。