Php 在后台运行Ajax调用并更新主页面

Php 在后台运行Ajax调用并更新主页面,php,jquery,ajax,Php,Jquery,Ajax,情景 我有一个export.php文件,可以远程导出1000个图像。它被分解为导出20个图像,然后重新加载并执行下一个20,直到所有图像都已导出。这很好,我想让它看起来更干净,并在后台运行 因此,当我在index.php页面上使用jQuery时,我做了一个简单的ajax调用,希望响应是“20”然后是“40”,以此类推,显示到目前为止已经导出了多少图像。要是这么容易就好了 问题是,我的首页会随着第一次呼叫而更新,但我需要它继续运行和更新,直到我这么说。毫无疑问,我错过了一些简单的事情,总是这样 任

情景 我有一个export.php文件,可以远程导出1000个图像。它被分解为导出20个图像,然后重新加载并执行下一个20,直到所有图像都已导出。这很好,我想让它看起来更干净,并在后台运行

因此,当我在index.php页面上使用jQuery时,我做了一个简单的ajax调用,希望响应是“20”然后是“40”,以此类推,显示到目前为止已经导出了多少图像。要是这么容易就好了

问题是,我的首页会随着第一次呼叫而更新,但我需要它继续运行和更新,直到我这么说。毫无疑问,我错过了一些简单的事情,总是这样

任何帮助都将不胜感激,我希望这是有意义的

ajax调用:

$.ajax({
   url: "export_images.php",
   cache: false,
   success: function(data){
     $("#export_images_result").text(data);
   }
});

您可以使用单独的ajax调用和分页,每20个图像调用一次php文件。而不是让php文件执行它。如果您发布php和其他javascript,我很乐意给出一个示例


我建议不要使用post进行如此大的上传,但可以使用公共ftp或其他方式。POST是如此的不可靠,并且不能给出进度,等等。FTP远不是完美的,但是对于这种类型的系统来说是一个更好的选择(imo)。虽然我猜你有时不需要选择。

你可能想使用一个函数来重复调用页面,这样它就可以处理所有的图像。

你有什么代码示例可以提供吗?我想知道你是不是php已经在每个批处理过程结束时报告了一些东西。如果是这样的话,并且您的ajax脚本正在工作,那么报告很可能出现在responseText中。我理解这个问题。这是因为它只运行一次页面,并返回初始加载的结果,即20。当export_images.php重新加载以处理接下来的20个图像时,它会占据整个页面并开始运行,就像我直接进入页面一样。我正在寻找它在后台运行,并在运行时更新#导出#图像#结果。然后在结尾说“842张图片已经被导出”,这实际上是从一个网站上抓取的,所以没有帖子。我是否可以将其包装在函数中,并使其自行调用,直到成功结果返回“所有导出的图像”。然后在函数中检查并添加一个中断。等等,如果你是屏幕抓取,你不会只使用php吗?呃。。。export_images.php执行抓取操作,我只希望前端不显示重新加载的php页面。我错过什么了吗?我想我明白你在做什么了。你有一个php程序从一个站点抓取图像,然后通过ajax调用将它们发送到浏览器。它会将图像发送到一个临时目录,稍后进行压缩以供用户下载,但原则上是一样的。我喜欢下面@jason的想法,让页面在没有返回结果的情况下运行(听起来很危险),然后轮询我的mysql数据库,查看1000个页面中有多少已经被处理。当脚本运行时,export_images.php确实会因任何问题而后退,因此它会再次尝试处理任何未处理的图像,有时返回的图像包含0个字节,等等。我猜计时器将是一个糟糕的选择,因为您不知道页面何时完成处理以启动下一个。因此每次加载页面时,再处理20张图像?我认为您可以在页面上包含一些逻辑,返回已处理的图像数量,如果20个图像已完成,则开始另一批。我认为您需要某种循环来调用页面以加载下一批,但是在没有看到代码的情况下很难说。或者,如果单页面加载启动了所有1000个图像的批处理,您可能需要另一个页面,该页面可以返回到目前为止已处理的图像数量,您可以通过ajax进行轮询。我喜欢这个想法,我将对它进行测试,看看它是如何运行的。我想我也可以尝试上面的想法,循环一个函数,成功后再运行20个图像,直到完成。