Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 终止另一个php脚本_Javascript_Php_Ajax - Fatal编程技术网

Javascript 终止另一个php脚本

Javascript 终止另一个php脚本,javascript,php,ajax,Javascript,Php,Ajax,我有一个带有javascript代码的php脚本,我正在向第二个php脚本发送一个AJAX get()请求。第二个脚本开始运行。如何从第一个脚本终止第二个脚本?您可以中断ajax查询 例如,如果在file1.php中使用jQuery,则可以通过ajax调用请求file2.php: <script> var jqxhr = $.get( "file2.php", function( data ) { // do some thing. alert( "Get was perfo

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

您可以中断ajax查询

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

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

var jqxhr=$.get(“file2.php”,函数(数据){
//做点什么。
警报(“执行了Get”);
});
稍后在同一file1.php中,单击按钮或其他用户操作/事件处理程序

<script>
//kill the request

jqxhr.abort();
</script>

//终止请求
jqxhr.abort();

这只是一种可能性。

您可以中断ajax查询

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

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

var jqxhr=$.get(“file2.php”,函数(数据){
//做点什么。
警报(“执行了Get”);
});
稍后在同一file1.php中,单击按钮或其他用户操作/事件处理程序

<script>
//kill the request

jqxhr.abort();
</script>

//终止请求
jqxhr.abort();

这只是一种可能性。

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

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

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

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

    一种变体是有一个“heartbeat”系统,其中JS计时器定期更新锁/触发器,并使用时间戳说“是的,请继续处理这个”;如果(2)处的脚本发现时间戳太旧,它将中止。如果您想在用户感到厌烦并离开页面时中止执行,这种方法是有利的,因为您无法可靠地将其捕获为事件并发送特定的“中止”请求(例如,考虑用户只是将其笔记本电脑从internet拔出)


    除了“stop!”和“keep going!”之外,您实际上还可以使用这种方法与正在运行的PHP进程进行任何通信,只需将其写入文件或数据库即可。由于PHP中没有“事件”模型,也没有任何类型的线程(没有进入非常复杂的第三方扩展),PHP脚本在开始运行后发现事情发生了变化的唯一方法是主动查询它们,因此长时间运行的脚本应尽可能结构化,以便它们可以定期“检查邮件”,可以这么说。

    根据问题评论中的澄清,您得到的似乎是:

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

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

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

    一种变体是有一个“heartbeat”系统,其中JS计时器定期更新锁/触发器,并使用时间戳说“是的,请继续处理这个”;如果(2)处的脚本发现时间戳太旧,它将中止。如果您想在用户感到厌烦并离开页面时中止执行,这种方法是有利的,因为您无法可靠地将其捕获为事件并发送特定的“中止”请求(例如,考虑用户)