2011-08-13 19 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); 

Iが「L:0」警告を取得終わり。 IF文の行警告のコメントを解除すると、それぞれの警告が0になります。

+2

req [count] = key;の代わりに 'req.push(key)'を試してください。 –

+1

'$ .get'ステートメントの下のコードは、コールバックが非同期であるため、コールバック関数の直前、直前、**で実行されます。あなたの配列はOKですが、コールバックが終了する前に配列を使用することはできません。 Btw、これはよくある間違いです。 –

+0

アラートをそれぞれコールバックに移動すると、そのコールバックが機能します。 – numbers1311407

答えて

1

get呼び出しは非同期で実行されているため、実際に要素が設定される前にarLen=req.lengthが評価されています。決定したように、非同期呼び出しのコールバックから適切に値を設定することができます。

+0

私は例を探していますが、あまり見つけられないようです。私はまだ.getを使うべきか、.ajaxに切り替えるべきですか? – execv

7

AJAXリクエストは、デフォルトでは非同期です。同期するようにAJAX要求を変更するか、コールバックにreqの値を使用する必要があります。

さらに、count変数とreq[count] = key;を使用するのではなく、req.push(key)を使用することもできます(これは問題ではありません)。

関連する問題