2011-08-13 42 views
1

出於某種原因,我的價值不被存儲在陣列中:的Javascript:數組

var req = new Array(); 
$.get('./ajax/get_cat_info.php?cid=' +cid, function(data, textStatus) { 
    var count = 0; 
    $.each(data, function(key, val) { 
     $('#' + key).show(); 
     if(val == 1) { 
      req[count] = key; 
      count = count + 1; 
      //var arLen=req.length; 
      //alert('l: ' + arLen); // this works though 
     } 
    }); 
}, 'json'); 

var arLen=req.length; 
alert('l: ' + arLen); 

我得到警告「1:0」結尾。如果我在IF語句中取消對線路警報的註釋,它會對每個警報發出警報,然後仍然警報0.

+2

嘗試'req.push(key)'而不是'req [count] = key;'? –

+1

'$ .get'語句下面的代碼立即執行,ergo,**在回調函數之前執行,因爲回調是異步的。你的數組是OK的,但是在回調完成之前你不能使用它。順便說一句,這是一個常見的錯誤。 –

+0

如果您將警報轉移到每個回調之後,它就會起作用。 – numbers1311407

回答

1

get調用異步運行,所以arLen=req.length正在評估實際完成的元素函數之前。如您所確定的那樣,您可以在異步調用的回調中相應地設置這些值。

+0

我正在尋找示例,但似乎找不到太多內容。我仍然應該使用.get或切換到.ajax? – execv

7

AJAX請求在默認情況下是異步的。您將不得不將AJAX請求更改爲同步,或在回調中使用req的值。

此外,你可能想使用req.push(key)而不是使用count變量和req[count] = key;(雖然這不是你的問題)。