2013-11-21 89 views
-2

我是新的網絡編程,我不完全理解一些簡單的事情。 假設我們有以下的Ajax請求:Ajax請求後的Javascript變量狀態

var records = []; 
    $.ajax(
    { 
     url : "index", 
     dataType: 'json', 
     success: function (response) 
     { 
      records = response; 
     }     
    }); 
    alert(records.length);//This displays 0 
    alert(records.length);//This alert correctly displays number of records 

的問題是,該陣列記錄,如果我嘗試調用AJAX(第一警報顯示零長度後立即使用它們顯示爲空,而第二警報顯示正確的長度)。什麼問題以及如何解決?

+2

問這個問題應該有一般警告,因爲每天至少要問50次! – adeneo

+0

Javascript是非阻塞的! –

+0

在問你這樣的問題之前,請多做一點研究。 – putvande

回答

3

你只需要把你的提醒裏面的成功回調。

var records = []; 
    $.ajax(
    { 
     url : "index", 
     dataType: 'json', 
     success: function (response) 
     { 
      records = response; 
      alert(records.length); // will always be correct 
     }     
    }); 

在您的示例中,行爲將是不可預知的,並將取決於調用返回的速度。

2

Ajax中的A代表異步

成功函數不觸發,直到HTTP響應回來。

當第一個alert發生火災時,它還沒有回來。在您點擊確定到alert所需的時間後,響應已到達,因此在第二個alert觸發時成功功能已運行。 (alert是一個阻塞函數)。

在發送HTTP請求後不立即處理成功函數中的數據。