【发布时间】:2017-01-19 09:04:15
【问题描述】:
请给我一个很长的问题......
我必须将一条数据库记录添加到一张主表中,比如说test 表。在向该表添加记录后,我想要它的last inserted id,然后想在事务表中添加大约 1000 个条目(同时向这 1000 条记录发送 EMAILS),比如说test_transaction 表。
但是第二个操作,将记录添加到事务表中,需要更多的秒来将记录添加到数据库。我正在使用客户 MVC,我的代码看起来像...
public function addtotest()
{
$strSql = "INSERT INTO test ...";
$intId = $this->db->execute($strSql);
foreach($arrTransaction $transact)
{
$strSql = "INSERT INTO test_transaction ...";
$this->db->execute($strSql);
}
echo $intId;
}
所以我想将test_transaction 表的条目放入另一个action,如下所示
public function testtrancation()
{
$id = $_REQUEST['id']; //It's understood that I am doing proper validation here
foreach($arrTransaction $transact)
{
$strSql = "INSERT INTO test_transaction ...";
$this->db->execute($strSql);
}
}
所以主要问题,我从AJAX 调用addtotest 操作,当它给出id 作为响应时,我想调用另一个AJAX,它将近似1000 记录添加到数据库。
但我不想让用户再等待几分钟以获取 1000 记录,从而影响用户体验。
- 所以我正在通过
addtotest`AJAX' 调用添加记录后重新加载页面。 - 呼叫另一个
AJAX呼叫successofaddtotest。 -
在调用
testtransactionAJAX之后,我正在重新加载我的页面。$.ajax( { url: SERVER_PATH + 'addtotest', type: 'post', async: true, data: { required_data: required_date }, success:function(data) { alert('Record added successfully.'); //I DO NOT WANT USERS TO WAIT FOR THIS AJAX CALL $.ajax( { url: SERVER_PATH + 'testtransaction', type: 'post', async: true, data: { intId: data.id }, success:function(data) { //DO NOTHING }, }); //I DO NOT WANT USERS TO WAIT FOR THIS AJAX CALL location.reload(); }, });
但是随着页面重新加载,我的 AJAX 调用也会在未完成 AJAX 请求的情况下消失。
那么在这种情况下可以做到吗?如果您想了解更多详细信息,请告诉我。
我不希望用户等待另一个 1000 条目(以及向这 1000 条记录发送 EMAILS)被写入数据库。
【问题讨论】:
-
@NeilA,非常感谢您改进问题。
-
很高兴能提供帮助
-
我从未使用过它们,但是使用 Ajax 调用 start a cronjob 怎么样?
-
在测试表上插入数据时,可以在redis上发布事件,即使使用节点js也可以监听。
-
您为什么要让客户参与您的第二千次插入?为什么还要涉及 PHP?如果千次插入 100% 依赖于最后一个插入 ID,那么您可能可以在 MySQL 存储过程中完成所有操作!