0

JSON ファイルをロードした直後にロードしたデータを使用するのに少し問題があります。以下のコード。

newdata = []

$.getJSON(file, function(data) {
            $.each(data.items, function(i,item){
            if (item.id != undefined) {
                if (item.id === cl) {
                    newdata.push(item.id);
                }
            }
            });
        });

console.log(newdata);

ただし、console.logステートメントはデータを返しません。空の配列を返します[]dataただし、 Chrome デバッガーで変数を呼び出すと、正しい配列が返されます。JSON ファイルからデータを作成した直後に、正しい要素でデータを使用するにはどうすればよいですか?

4

3 に答える 3

1

このように書くべきですが、

newdata = []

$.getJSON(file, function(data) {
            $.each(data.items, function(i,item){
            if (item.id != undefined) {
                if (item.id === cl) {
                    newdata.push(item.id);
                }
            }
            });
              console.log(newdata);
        });
于 2013-10-15T20:13:46.547 に答える
0

別の方法は次のとおりです。

$.ajaxSetup({
    async: false
});

しかし、この方法は非推奨であり、これを行うためのより良い方法が melc と Thomas Upton によって提供されていることが指摘された後です。

于 2013-10-15T20:25:59.967 に答える
0

jQuery.getJSON非同期です。ドキュメントを読んで、成功コールバックがどのように機能するかを理解する必要があります。

JSON データを受け取る関数は成功時に呼び出されますが、実際の関数はすぐ$.getJSONに戻り、実行が続行されます。したがって、実際には、これはJSON データが返される前に実行されることを意味しますが、Chrome コンソールに手動でログを記録するまでに、データは取得されています。console.log(data)

jQuery AJAX メソッドは、promise のような API を実装するオブジェクトも返すので、それも使用できます。

Stack Overflow と他のリソースの両方で、このトピックに関する非常に多くの質問があります。

次のコードでは、success関数の引数とDeferredオブジェクト メソッドの両方を使用しています。関数内のデータを使用して、好きなことを行うことができますhandleData

function handleData(data) {
    // you can do whatever you want with your data here
    console.log(data);
}

function formatData(data) {
    var formatted = [];
    $.each(data.items, function(i,item){
        if (item.id != undefined) {
            if (item.id === cl) {
                formatted.push(item.id);
            }
        }
    });
    return formatted;
}

$.getJSON(file, formatData).done(handleData);
于 2013-10-15T20:25:25.333 に答える