我发现this answer但它已经很老了,我不确定反复ping客户端是最好的方法。
我有一个带有按钮START
的HTML页面,它对另一个PHP脚本执行AJAX调用,该脚本本身执行繁重的SQL查询。完成此操作后,结果将以JSON格式返回,Javascript将显示该结果。
我需要用户能够停止此请求,因此我添加了STOP
按钮。如何使这个按钮在点击时停止SQL查询(或者更常见的是任何正在运行的PHP脚本)?
到目前为止我的想法:
id
id
请求START
添加到参数中
abort_request.php
并使STOP
按钮使用唯一的id
abort_request.php
将唯一的id
存储到aborted
$_SESSION
数组中
id
数组这是一个解决这个问题的好方法,还是有一些我没想到的缺点?
答案 0 :(得分:0)
我不知道并且从未体验过heavy SQL query
,但根据我的经验和我的研究,您可以通过abort();
xmlhttp
或ajax
来恢复执行执行sql的php文件。
我的测试:
的index.php
var xmlhttp;
function loadXMLDoc(){
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "mysql.php", true);
xmlhttp.send();
}
function stopLoad() {
xmlhttp.abort();
}
mysql.php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
for ($i = 0; $i < 9999; $i ++) {
INSERT INTO `test`.`big-data` (`id`, `a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`, `u`, `v`, `w`, `x`, `y`, `z`) VALUES ('', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test');
}
插入数据需要9.402
秒。
如果我在3秒左右停止它将停止执行,但仍然保留在我停止之前插入的数百个数据。