2017-12-06 7 views
0

私は、バックエンドコードに対する3つの単純なajaxリクエストを処理する汎用関数を作成しました。 systemName "AD"がコード0を返した場合、次の2つの関数はまったく実行されないはずです。 しかし、条件が満たされていれば、関数が実行されているように見えますsADsuccess = 1かどうか、dosentは関数が変数を設定するのを待ちます。 私の質問は次のとおりです:これをより良い方法で書くにはどうすればいいですか?可変用量は新しい値を設定します

var sADsuccess=1;    
     $("#frmPwdChg").submit(function(e) { 
      var formzData = $("#frmPwdChg").serialize(); 

      ChangeSystemPwd('UPDATE/AD/USER/PASSWORD/',formzData,'AD',1,0,0) 
       if(sADsuccess=1){ 
       ChangeSystemPwd('UPDATE/Cosmic/PASSWORD/',formzData,'Cosmic',0,0,0); 
       ChangeSystemPwd('UPDATE/Imprivata/PASSWORD/',formzData,'Imprivata',0,1,1); 
       } 
       else{ 
        $("#btnPwdChg").removeClass("loading"); 
        $("#btnPwdRes").addClass("hidden"); 
        $("#btnLogout").removeClass("hidden"); 
        $("#frmPwdChg")[0].reset(); 
       } 
      e.preventDefault(); // avoid to execute the actual submit of the form. 
     });    


function ChangeSystemPwd(APIurl,sFormData,sSystemName,loadStart,loadEnd,bEmptyForm){ 
var url = sUrl + APIurl 

$("#btnPwdChg").addClass("loading"); 
$.getJSON({ 
     type: "POST", 
     url: url, 
     data: sFormData, 
     success: function(response) //Om Ajax anropet lyckas 
     { 
      var sMessage=response[0].message; 
      var sCode=response[0].code 

      if(sCode===1) { 
       showGreen(sSystemName,sMessage) 
       sessionStorage.setItem(sSystemName, 'success'); 
     } 
      else if(sCode===0) { 
       showRed(sSystemName,sMessage); 
       sessionStorage.setItem(sSystemName, 'failure'); 
       if(sSystemName='AD'){ 
        alert('AD') 
        sADsuccess=0; 
       } 
     } 
      else if(sCode===-1){ 
       //anropet kom tillbaka som att det inte fanns någon användare. Visa ingenting 
       sessionStorage.setItem(sSystemName, 'no-user'); 
     } 
     }, 
     error: function(xhr,response){ //Om ajax anropet inte lyckas, hämta status och skriv ut ett meddelande 
     showErr(xhr,response,'#errResponse') 
     }, 
     complete: function(xhr,data){ 
     if (loadEnd==1){ 
      $("#btnPwdChg").removeClass("loading"),$("#btnPwdRes").addClass("hidden"),$("#btnLogout").removeClass("hidden");  
       } 
     if (bEmptyForm==1){ 
      $("#frmPwdChg")[0].reset(); 
     }   
     } 

}); 

}

+1

約束を使用し、結果コードで解決してください。 [グローバル変数を非同期に変更すると動作しません](https://stackoverflow.com/q/23667086/1048572)。 – Bergi

+0

'if(sADsuccess = 1){'は常に真ですが、*比較*ではなく*を割り当てています。さらに、同期操作と非同期操作を混在させています。ありがとう。 – David

+0

ありがとう。 私はまだ多くのことを学ぶことがあることを理解しています。ポインタのためのthx ..私はこの周りに私の頭を包むことができるかどうかを見続ける... – Wyrm

答えて

0
sADsuccess=1 

割り当て、ない比較です。 =の代わりに==または===を使用してください。

+1

それでも、値を同期的にチェックしようとする問題を解決しません。しかし、良いキャッチ! –

関連する問題