почему я не могу получить JSON с сервера в ExtJs4?

Я хочу получить JSON с сервера. А вот функция просмотра сервера django:

def showChart(request):
    data = [{"id":1, "name":"Tom", "email":"[email protected]"}, {"id":2, "name":"Bosh", "email":"[email protected]"}]
    return HttpResponse(json.dumps(data), mimetype="application/json");

Очевидно, что showChart() вернет json.

Мой внешний код extjs4:

Ext.onReady(function() {
Ext.define('ProductionInfo', {
    extend: 'Ext.data.Model',
    fields: ['email', 'id', 'name']
});

var store_new = Ext.create('Ext.data.Store', {
    model: 'ProductionInfo',
    proxy: {
      type: 'ajax',
      url : 'http://localhost:8000/production_data',
      reader: {
          type: 'json'
      }
    }
});

store_new.load();
alert(store_new.getCount());

});

Но в диалоговом окне предупреждения отображается «0», а правильный ответ — «2». Так почему я не могу получить JSON с сервера? (Я могу получить правильный JSON через запрос GET в Chorme и Firefox)


person Arthur Yoo    schedule 25.04.2012    source источник
comment
Хранилище загружается асинхронно, поэтому оно все еще загружается, пока вы вызываете метод getCount (и, таким образом, возвращаете значение 0). Вам нужно добавить прослушиватель к событию load (хранилища), если вы хотите выполнить некоторую логику, которая происходит после завершения загрузки.   -  person Tommi    schedule 25.04.2012
comment
Том прав, загрузка магазина асинхронна, возможно, этот ответ поможет вам stackoverflow.com/questions/8367074/   -  person nscrob    schedule 25.04.2012
comment
Спасибо, Том и nsrob! загрузка магазина является асинхронной, это ключ. Поэтому я поставил «оповещение (store_new.getCount ());» в событии загрузки (магазина) он успешно возвращает 2.   -  person Arthur Yoo    schedule 26.04.2012


Ответы (1)


Вы можете проверить мой образец: https://github.com/lucassus/extjs4-account-manager Это приложение для рельсов, но механизм json очень похож.

В основном вам нужно определить модель с действительным proxy: https://github.com/lucassus/extjs4-account-manager/blob/master/app/assets/javascripts/app/model/User.js
и хранилище, которое будет иметь атрибут model: https://github.com/lucassus/extjs4-account-manager/blob/master/app/assets/javascripts/app/store/Users.js

person luacassus    schedule 25.04.2012
comment
Когда я запускаю свой код extjs4, сервер может обнаружить ajax-запрос Ext. Мой код основан на официальной документации extjs4. - person Arthur Yoo; 25.04.2012