2012-04-20 7 views
2

要素をワーク配列にプッシュできません。ここでは...コンソールログには、適切なオブジェクトを返しているが、彼らは、配列にプッシュされることはありません私のコードです:Javascriptプッシュ方法が機能しない

var works = new Array(); 
    $(window).ready(function() 
    {  

     $.getJSON('AJAX/getWorks.php', function(data) { 
      $.each(data, function(key, val) { 
      console.log(val); 
      works.push(val); 
      }); 
     }); 
     console.log(works); 
    }); 

とJSONオブジェクト:

Object 
date: "2012-04-08 17:53:58" 
description: "sadasd" 
id: "2" 
link: "sadasd" 
name: "dsad" 
objects: null 
position: "2" 
__proto__: Object 

誰もが私がやっているかを見ます違う?回答のために先にありがとう...

+0

欠落している閉じ括弧にコピー/ペーストのエラーがありますか? –

+1

配列に含まれていないことをどのように知っていますか?あなたはどこに配列を出力していますか? ajaxリクエストが完了する前に配列をログに記録していませんか? –

+0

デバッグ文を 'console.log(val、works)'に変更するとどうなりますか? – apsillers

答えて

5

あなたのコードではあまりにも早く配列を記録しています。 は非同期であるため、console.logはajax要求が完了する前に実行されます。

$.getJSON('AJAX/getWorks.php', function(data) { 
       $.each(data, function(key, val) { 
       console.log(val); 
       works.push(val); 
       }); 
       console.log(works); // move this here so the array is logged after the ajax request finishes. 
      }); 

EDIT

あなたはAJAX要求の後にその変数を使用したい場合は、以下の

を行うことができますAJAXリクエスト

function getWorks() 
{ 
    return $.getJSON('AJAX/getWorks.php', function(data) { 
       $.each(data, function(key, val) { 
       works.push(val); 
       }); 
} 

を収容するための関数を作成します。その後することができますajaxリクエストが完了したことを確認するには、次のようにします。

$.when(getWorks()).then(function(){ 
    // you can access the array in here because the ajax has finished executing 
}); 
+2

はい、AJAX呼び出しが完了する前にOPのログコードが実行されています。 – jmoerdyk

+0

いいえ、私はそうは思わない...私はそのdocument.ready内のgetJson関数の直後にオブジェクトを既に初期化する必要があるので、それを記録しています... – hjuster

+0

私の例は誰も見ていませんか?あなたたちは信じられないほどです!この例ではJSON(適切にテストすることはできません)とグローバル変数があります。シェシ。 – rlemon

関連する問題