0
initialize: function() {
    var store = {};
    var item = {};
    var me = this;

    Ext.Ajax.request({
        url: "some_valid_url",
        success: function(response) {
            try {
                var parser = new DOMParser();
                var xml = parser.parseFromString(response.responseText, "text/xml");

                store = Ext.create('Ext.data.Store', {
                    autoLoad: true,
                    fields: ['temp', 'low', 'high', 'desc', 'icon'],
                    data: xml,
                    proxy: {
                        type: 'memory',
                        reader: {
                            type: 'xml',
                            rootProperty: 'current',
                            record: 'day'
                        }
                    }
                });
                item = Ext.create("Ext.Container", {
                    var bla = "hello world",
                })
            } catch (err) {
                //err
            }
        }
    });
}

console.log("STORE AND ITEM");
console.log(item);
console.log(store);

なぜオブジェクトitemstore返すのですか?null

ただし、と要素console.logの間に入れると、有効な要素が取得されるように、一部のデータを解析していることがわかります。storeitem

STORE AND ITEM 
Object {} ArticleWeatherList.js:105
Object {} ArticleWeatherList.js:106
4

2 に答える 2

1

Ajax は非同期です。これは基本的に、コードがリクエストの完了を待たずに実行を継続することを意味します。したがって、item と store を使用しようとすると、リクエストはまだ完了しておらず、それらを設定する success メソッドも実行されていません。これを回避する唯一の方法は、リクエストを強制的に同期的に発生させるか (これは一般的には悪い考えです)、リクエストに依存するすべてのコードを成功コールバックまたは成功コールバック内から呼び出される関数に入れることです。

于 2013-05-15T10:44:29.957 に答える