2017-12-12 1 views
0

내 함수 emitirFatura() 내 함수 atualizarEncomenda redirectFatura() 실행하려면 끝내기를 기다리고 있지만 작동하지 않습니다. actualizarEncomenda는 Ajax 요청으로부터 응답을 반환하기 전에 d되어 스타터 용

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 case에서 약속 한 일을하지 않으며, 내 추측은 d.resolve ('result here')라고 생각합니다. 코드에 더 많은 오류가 있습니다. – Peter

+0

해결을 실행하지 않아도됩니까? 'd.resolve(); ' –

답변

0

는 그 값 또는 상태의 변화했다. promise을 반환하려면 $.post 앞에 신고서를 제출해야합니다. Deffered은 약속 객체입니다. 그러므로 그것을 해결하지 않고 약속을 되 돌리는 것만이 반환되어야합니다.

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을 promise chain에 넣으십시오. 그러면 다음과 같이 될 것입니다. $ ('# sending-control') .html ('...'); delay (4000) .then ($ ('# sending-control') .html ('')). finally (return d.resolve())': – Wijnand