从另一个终止php脚本

时间:2013-11-08 14:41:37

标签: javascript php ajax

我有一个带有javascript代码的php脚本,我正在向第二个php脚本发送一个AJAX get()请求。第二个脚本开始运行。如何从第一个脚本终止第二个脚本?

2 个答案:

答案 0 :(得分:4)

根据问题评论中的澄清,您所拥有的似乎是:

  1. 用户使用JS与之交互的HTML页面(此页面可能是使用PHP生成的,但这与此方案无关)。
  2. 来自页面(1)的AJAX调用调用生成图像的PHP脚本,这是一个缓慢而昂贵的过程
  3. 你想要一个额外的AJAX触发器,它将中止当前运行的脚本(2)
  4. 我将采取的基本方法是在脚本(2)启动时创建某种“锁定”或“触发器”,并定期检查步骤。触发器可以是文件,也可以是数据库中的行等 - 关键是它需要在多个PHP脚本可以同时访问的位置。

    (3)中的脚本可以是一个非常小的PHP脚本,它删除您要中止的特定文件/数据库行/ etc。当下一个(2)的脚本检查时,它会发现其锁定/触发器不再存在,然后可以整理其创建的任何工作数据exit

    确保在执行此操作时考虑安全性:JS必须知道触发器的名称,因此可以由用户操作。它应该足够随机,以至于某人不能恶意中止所有进程,并且其格式受到充分限制,以至于不能欺骗中止脚本删除与其无关的文件。这实际上并不难 - 只是随机的数字和字母串 - 但删除脚本需要确保它实际上是它接收的格式,因为它不能信任JS这样做。

    对此的一个变体是拥有一个“心跳”系统,其中JS计时器定期用时间戳更新锁定/触发器,说“是,请继续处理”;如果(2)处的脚本发现时间戳太旧,则中止。如果你想,如果用户厌倦中止执行,并离开页面,因为你不能可靠地捕获,作为一个事件,并发送一个特定的“中止”请求(考虑,例如该方法是有利的,用户只需拔掉他们的来自互联网的笔记本电脑)。

    超越“停止!”并且“继续!”,您实际上可以使用此方法将任何与正在运行的PHP进程进行通信,只需将其写入文件或数据库即可。由于PHP中没有“事件”模型或任何类型的线程(没有进入相当复杂的第三方扩展),PHP脚本在开始运行后发现事物的唯一方法就是主动查询它们,所以应该尽可能地构建长时间运行的脚本,以便他们可以定期“检查他们的邮件”,可以这么说。

答案 1 :(得分:0)

您可以中断ajax查询。

如果您在file1.php中使用jQuery,则通过ajax调用请求file2.php:

<script>
var jqxhr = $.get( "file2.php", function( data ) {
  // do some thing.
  alert( "Get was performed." );
});
</script>

稍后在同一个file1.php中,稍后点击按钮或其他用户操作/事件处理程序,

<script>
//kill the request

jqxhr.abort();
</script>

这只是一种可能性。