【发布时间】:2014-06-27 10:28:49
【问题描述】:
所以我有一个脚本,它使用“INSERT QUERY”逐行将 .CSV 文件导入数据库。
我希望用户能够随时停止此脚本。
这是我的 AJAX 调用:
postselect = $.post('addcsvtodatabase.php');
- 第一次尝试:
这是我停止脚本的初始处理程序:
$('#input').click(function(){
postselect.abort();
})
我注意到 abort() 方法确实停止了脚本,但数据仍在插入数据库中
- 第二次尝试:
从在初始 AJAX 调用 (addcsvtodatabase.php) 上运行的 .php 脚本中,我保存 SQL 查询的进程 ID,如下所示:
$idconnexion = $connexion->query('SELECT CONNCTION_ID()')->fetch(PDO::FETCH_ASSOC);
$idconnexion = $idconnexion["CONNECTION_ID()"];
$_SESSION['idconnexion'] = $idconnexion;
然后,我对 abortsql.php 脚本进行另一个 ajax 调用,该脚本获取进程 ID 并尝试终止它:
$requete = "KILL ".$_SESSION['idconnexion'];
$connexion->query($requete);
输入处理程序如下所示:
$('#input').click(function(){
postselect.abort();
$.post( "abordsql.php");
})
问题是,我注意到当我尝试中止导入时,abortsql.php 处于“加载”模式,并且仅在初始 ajax 调用完成时才会触发,因此它只会在进程结束时终止进程完了,没啥用。
我尝试在 phpmyadmin 上手动终止该进程(我从脚本和 PHPmyadmin 获得相同的进程 ID,所以那里没有问题),它可以工作,它确实停止将数据导入数据库。
如何在不等待初始 AJAX 调用结束的情况下运行 abordsql.php 脚本?
谢谢!
【问题讨论】: