我希望我的函数emitirFatura()等待我的函数atualizarEncomenda结束执行redirectFatura(),但它不起作用。
function emitirFatura(id){
atualizarEncomenda(id).then(redirectFatura(id));
}
function redirectFatura(id){
window.location = "index.php?menu=admin&submenu=fatura&control=emitir&encomenda="+id;
}
function redirectFatura(id){
window.location = "index.php?menu=admin&submenu=fatura&control=emitir&encomenda="+id;
}
function atualizarEncomenda(id){
d = $.Deferred();
var formData = 'id='+id;
$.post("admin/updEncomenda.php", formData , function(data)
{
if (data != '' || data != undefined || data != null){
$('#sending-control').html('<div align="center"><img src="../../img/checked.gif" width="50px"/></div>');
setTimeout(function(){ $('#sending-control').html('');}, 4000);
d.resolve;
}else{
$('#sending-control').html('<div align="center"><img src="../../img/error.gif" width="50px"/></div>');
setTimeout(function(){ $('#sending-control').html('');}, 4000);
}
});
return d.promise();
}
答案 0 :(得分:0)
对于初学者,actualizarEncomenda
在ajax请求的响应更改了其值或状态之前返回d
。如果您想要返回$.post
,则需要在promise
前面使用return语句。 Deffered
本身就是一个承诺对象。因此,要在不解决它的情况下返回承诺,只需返回d。
Resolve
是一个函数,因此应该是d.resolve()
。
当承诺得到解决后,您可能希望返回已解决的承诺。
所以这样的事情应该这样做:
function atualizarEncomenda(id){
d =
$.Deferred();
var formData = 'id='+id;
return $.post("admin/updEncomenda.php", formData , function(data)
{
if (data != '' || data != undefined || data != null){
$('#sending-control').html('<div align="center"><img src="../../img/checked.gif" width="50px"/></div>');
setTimeout(function(){ $('#sending-control').html('');}, 4000);
return d.resolve();
}else{
$('#sending-control').html('<div align="center"><img src="../../img/error.gif" width="50px"/></div>');
setTimeout(function(){ $('#sending-control').html('');}, 4000);
}
return d;
});
}
希望这有帮助!