jQuery延迟不使用AJAX $ post查询

时间:2017-12-12 12:22:59

标签: javascript jquery

我希望我的函数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();
}

1 个答案:

答案 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;
    });
}

希望这有帮助!