2017-04-08 100 views
0

我有一個全局變量creditAmount,當用戶登錄時通過ajax調用填充。我想稍後在登錄後調用的另一個函數中使用該變量。我如何保持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(); 
    }); 
}); 
} 

最後,我這是怎麼調用這兩個函數,而是通過我到這裏的時間creditAmount再次爲空

getCustomer(); 

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

設置延遲或使用承諾/回調。 –

+0

表單提交會發生什麼? –

回答

0

設置延遲或使用promises/callback。與ajax一起發送的請求與收到的用於填充變量的響應之間有一點時間差。

+0

好的,那太好了..讓我看看 – ToddT

+0

不,我不認爲這是它..我用那個ajax調用變量設置變量,然後我提交表單,它看起來像我失去了價值設置在該變量..不知道爲什麼 – ToddT

+0

@ToddT sry我很忙...你仍然有這個問題?我可以搭把手 ... –

0

你需要把這個條件:

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

...您的通話$.ajax()complete函數內。或者在您從ajax調用的complete函數調用的全局範圍函數中。如果在來自ajax的響應返回之前運行該代碼,則creditAmount仍將爲空。

這就是complete函數的全部用途:在響應返回時運行代碼。

所以,最有可能的,你的Ajax需要更改爲:

$.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(); 
    }, 
});