Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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
jquery ajax中止时中止php脚本执行_Php_Javascript_Jquery_Ajax_Apache - Fatal编程技术网

jquery ajax中止时中止php脚本执行

jquery ajax中止时中止php脚本执行,php,javascript,jquery,ajax,apache,Php,Javascript,Jquery,Ajax,Apache,当jQuery$.post被abort()中止时,我希望停止PHP脚本的执行。基本上,每当用户更改任何输入字段时,$.post应该点击test.php。如果在第一个请求返回之前更改了第二个输入,则会中止$.post,并发送一个新的输入。我希望PHP在发生这种情况时停止执行 根据: 仅当客户端正常断开连接(使用停止按钮)时,connection_status()才会返回中止状态。在这种情况下,浏览器发送RST TCP数据包,通知PHP连接已关闭 使用xhr.abort()时,是否仍要发送RST T

当jQuery
$.post被
abort()
中止时,我希望停止PHP脚本的执行。基本上,每当用户更改任何输入字段时,
$.post
应该点击
test.php
。如果在第一个请求返回之前更改了第二个输入,则会中止
$.post
,并发送一个新的输入。我希望PHP在发生这种情况时停止执行

根据:

仅当客户端正常断开连接(使用停止按钮)时,connection_status()才会返回中止状态。在这种情况下,浏览器发送RST TCP数据包,通知PHP连接已关闭

使用
xhr.abort()
时,是否仍要发送
RST TCP

为了确保我已经在
test.php
文件中对其进行了测试。从理论上讲,如果脚本停止,文件中的行数和大小应该不同。但它们都是一样的。因此,脚本没有中止

jQuery主文件:

var xhr = false;
$('input').on('change', function(){
    if(xhr){
        xhr.abort();
    }

    xhr = $.post('/test.php', this.value, function(b64){
        xhr = false;
    });
});
PHP test.PHP

ignore_user_abort(false);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test1.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test2.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test3.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test4.log', "1\r\n",  FILE_APPEND);
这可能有助于:

注释

在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。仅使用echo语句并不能保证发送信息,请参阅

而且:

也许重写一下会有帮助:

ignore_user_abort(false);
for($i = 0; $i < 4; $i++) {
  ob_flush();
  flush();
  if(connection_aborted()) {
    echo "\r\n\r\n";
    ob_flush();
    flush();
    exit;
  }
  file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test' . ($i+1) . '.log', "1\r\n", FILE_APPEND);
  sleep(1);
}
ignore\u user\u abort(false);
对于($i=0;$i<4;$i++){
ob_flush();
冲洗();
如果(连接被中止()){
回显“\r\n\r\n”;
ob_flush();
冲洗();
出口
}
文件内容($\u服务器['DOCUMENT\u ROOT']./test/test'.($i+1)。.log',“1\r\n”,文件附加);
睡眠(1);
}

尝试重新写入。还是不行。所有文件大小相同。直接进入浏览器中的地址并按下停止按钮也不起作用。你解决了吗?@poletaw“默认行为是在远程客户端断开连接时中止脚本。”尽管我很难验证这是一种实践。这是一个谎言。。。jquery没有向服务器发出用户中止的信号,或者php完全忽略了它。