我有一个带有 onchange
事件的输入:
<input type="text" value="2014-01-01" class="datepicker dateDashboard" onchange="repartiteur('DatesDashboard',$(this));document.location.href='index.php?menu=17|30&options=opt';" name="DateDebutDashboard">
function appelAjax(data)
{$.ajax(
{type: "post",
data: data,
url: 'index_ajax.php'
});
}
function repartiteur(action,this)
{switch (action)
{case 'DatesDashboard':
data = (
{'action' : action,
'champ' : this.attr('name'),
'date' : this.val()
});
break;}
appelAjax(data);}
期望的目标是,当我更改输入中的日期时,通过 AJAX 发送日期以更改数据库中的值,然后根据数据库中的新值重新加载页面。
问题是,有时,repartiteur 的 ajax 调用需要更长的时间才能使用react,并且当页面重新加载(使用第二个内联 javascript 调用)时,数据库中尚未发生更改。
问题:如果有可能的话,如何延迟第二个 javascript 部分(重新加载文档)以确保 ajax 调用在页面重新加载之前完成数据库更新?
检查此答案How to implement a lock in JavaScript我觉得有一些方法可以做到这一点,但这个答案适用于不同的事件,而我希望延迟发生在同一事件中但在不同的 javascript 行之间。
我知道 event.stopPropagation 但我不希望事件停止,它必须在 ajax 调用后继续。
编辑 - 这里是接收调用的 php 代码:
$action = $_POST['action'];
switch ($action)
{case 'DatesDashboard':
$codeUSR = $_SESSION['usr'];
$champ = $_POST['champ'];
$date = $_POST['date'];
$env = unserialize(getValue('Preferences','ps_personnes',"codeUSR='$codeUSR'"));
$env['nav']['Contrat']['dates'][$champ] = $date;
sauverEnvironnement($env,$oDB,'Preferences');
break;}
数据库定义:
$oDB = new PDO("mysql:host=$gSERV;dbname=$gBASE;charset=utf8",$gUSER,$gPASS);
$oDB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$oDB->setAttribute(PDO::ATTR_EMULATE_PREPARES,FALSE);
最佳答案
您想要一个嵌套的回调函数,如下所示:
$.ajax({
url: 'blahblah'
}).done(function() {
$.ajax({
url: 'secondlayer'
}).done(function() {
innerstuff();
});
})
});
解释是,您仅在第一个功能完成后才执行第二个功能(或成功完成,取决于您)。相反,只有当第二个函数也完全完成时,您才调用最终(内部)函数。
关于javascript - 如何在同一个 onchange 事件期间在两个 javascript 命令之间暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535521/