2017-12-12 11 views
0

私の関数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

あなたはelseのケースで約束をしていません、私の推測ではそのd.resolve( 'result here')もあります。コードにはさらに多くのエラーがあります。 – Peter

+0

解決を実行する必要はありませんか? 'd.resolve();' –

答えて

0

AJAX要求からの応答は、それが値または状態だ変更される前に、actualizarEncomendadを返しています。 promiseを返品したい場合は、$.postの前に返品陳述が必要です。 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; 
    }); 
} 

は、この情報がお役に立てば幸い!

+0

まだリダイレクト前にDBを調整するのを待っていません –

+0

[this](https://stackoverflow.com/questions/39538473/using-settimeout-on-promise-chain)トリックを使うことができますsetTimeoutを約束してください。次に、このようなものが得られます。$( '#sending-control')。html( '...'); ($( '#送信制御').html( ''))。最後に(戻りd.resolve()) ': – Wijnand

関連する問題