2017-04-08 13 views
0

ユーザーがログインするときにグローバル変数creditAmountが入力されました。後でその変数をログイン後に呼び出される別の関数で使用したいと思います。この後の機能では、creditAmountの値を使用可能にするにはどうすればよいですか?関数内でグローバル変数にアクセスできない - jQuery/ajax

creditAmountが定義されており、人口取得する場所これは、次のとおりです。

var creditAmount = ""; 

function getCustomer() { 
    $(function() { 
     $("#anId").submit(function(event){ 
     event.preventDefault(); 
     var form = this; 
     var custEmail = $("anotherId").val(); 
     $.ajax({ 
      url: "/return_customer", 
      data: {email: custEmail}, 
      type: "POST", 
      dataType: "json", 
      complete: function(data) { 
      creditAmount = data.responseJSON; 
      form.submit(); 
      }, 
     }); 
    }); 
}); 
} 

そして、私はcreditAmountを使用する必要があるところ、これは次のとおりです。

function getPendingCredit(){ 
    var modal = $("#fresh-credit-iframe"); 
    modal.load(function(){ 
     $(this).contents().find("#fresh-credit-continue-shopping").click(function(data){ 
     var enteredAmount = +($(modal).contents().find("#pending_credit_amount").val()); 
     console.log(creditAmount); 
     $("#fresh-credit").hide(); 
    }); 
}); 
} 

は最後に、これは私が両方の機能を呼び出す方法ですが、で私がここに行く時間はもう一度空白です

getCustomer(); 

if(creditAmount != ""){ 
    showModal(closeModal); 
    getPendingCredit(creditAmount); 
} 
+0

遅延を設定したり、約束/コールバックを使用します。 –

+0

フォーム送信時に何が起こりますか? –

答えて

0

は遅延を設定したり、約束/コールバックを使用します。 ajaxで送信されるリクエストと、変数を設定するために受信されるレスポンスとの間には、少しの時間差があります。あなたの$.ajax()コールのcomplete関数内...

if(creditAmount != ""){ 
    showModal(closeModal); 
    getPendingCredit(creditAmount); 
} 

+0

OK、それは素晴らしいです..私を見てみましょう – ToddT

+0

いいえ、私はそれを考えていません..私はそのajax呼び出しで変数を設定し、私はそれを持っているが、私はフォームを提出し、その変数に設定されて..なぜわからない – ToddT

+0

@ToddT sry私は忙しかった...あなたはまだこの問題がありますか?私は助けることができる ... –

0

あなたは、この条件を配置する必要があります。または、ajax呼び出しのcomplete関数から呼び出したグローバルスコープ内の関数の中で実行します。 ajaxからの応答が返される前にそのコードを実行すると、creditAmountは空のままです。

これは、complete関数の全目的です。応答が返されたときにコードを実行することです。

ので、ほとんどの場合、あなたのアヤックスに変更する必要があります。

$.ajax({ 
    url: "/return_customer", 
    data: {email: custEmail}, 
    type: "POST", 
    dataType: "json", 
    complete: function(data) { 
    creditAmount = data.responseJSON; 
    if(creditAmount != ""){ 
     showModal(closeModal); 
     getPendingCredit(creditAmount); 
    } 
    form.submit(); 
    }, 
}); 
関連する問題