2009-08-30 16 views
58
var list = []; 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
}); 
console.log(list.length); 

list.lengthは常に0を返します。私はFirebugでJSONをブラウズしましたが、それは整形式であり、すべてがうまく見えます。私は配列にアイテムを追加していないようですが、何が欠けていますか?jQueryの配列にアイテムを追加するにはどうすればいいですか?

+0

..あなたを助けます。 '$ .each'ループは項目をログに出力しますが、' list'に追加しませんか? – Kobi

答えて

113

$.getJSONは非同期なので、配列が入力される前にconsole.log(list.length);コードが実行されていると思います。

var list = new Array(); 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
    console.log(list.length); 
}); 
3

あなたは、AJAXリクエストが完了する前に、リストの長さのあなたのコンソールログが発生したため、非同期であるAjaxのリクエストを行っている:修正するには、これはあなたのコールバック中にあなたconsole.log文を置きます。

欲しいものを達成する唯一の方法は、ajax呼び出しを同期させることです。これは、.ajaxを使用してasynchを渡して行うことができます:falseただし、呼び出しが返されるまでUIをロックし、ブラウザからクラッシュすることに失敗した場合は、これを推奨しません。

2

希望これは、これは正しいようだ

var list = []; 
    $(document).ready(function() { 
     $('#test').click(function() { 
      var oRows = $('#MainContent_Table1 tr').length; 
      $('#MainContent_Table1 tr').each(function (index) { 
       list.push(this.cells[0].innerHTML); 
      }); 
     }); 
    }); 
関連する問題