Загрузка файла JSON в JSON-Store не работает

Ниже вы можете увидеть мой функционал входа в систему, который на самом деле работает. Но он не загружает предоставленный файл json сервером в JSON Store.

"console.log(" Сохранить до загрузки ",UserStore)" и "console.log(" Сохранить после загрузки ",UserStore)" показывает одно и то же сообщение, поэтому я предполагаю, что "UserStore.load(jsonRes)" не работает все. Я также попробовал "UserStore.loadData(jsonRes)" и "UserStore.loadRawData(jsonRes)", которые оба не работают ни одна (Ошибка: Uncaught TypeError: Object[object Object] не имеет метода "loadDataRaw"). Не могли бы вы объяснить мне, как решить эту проблему? Большое спасибо.

Ext.util.JSONP.request({

url: 'http://127.0.0.1:4712/talentcommunity/getuserinfo',

headers: { 
    'content-type': 'application/x-www-form-urlencoded ; charset=utf-8'
},

method: 'post',

params: {
    user:data1,
    pw:data2
},

callbackName: 'myCallback',

success: function (response) {

    var loginResponse = response;
    if (loginResponse.msg == "OK") {
        var UserStore = Ext.create('Ext.data.Store', {
            model: 'Sabine.model.user',
            data: response.user
        });
        me.signInSuccess();
    }
    else{
        loginView.showSignInFailedMessage('token null.');   
    } 

},

Предоставленный файл Json выглядит следующим образом:

{msg: "OK", user: Object}

Сам пользователь 'выглядит так: {"token":"ee80d56688fb7d3a8bcf5939fc9cbcf1","title":"","login":"bmuster","facebookId":"","firstName":"Bertha","lastName":"Muster","nationality":"GM","birthDay":"12/09/82","phone":"+4989111111","mobile":"+4918111111","street":"Musterstra\ufffde 11","city":"Musterstadt","zipCode":"66666","willingToTravel":"","pictureUrl":"","eMail":"bmuster@example.com","publicList":[]}

Мой магазин определяется следующим образом:

Ext.define('Sabine.store.MyJsonPStore', {
extend: 'Ext.data.Store',

requires: [
    'Sabine.model.user'
],

config: {
    autoLoad: true,
    autoSync: true,
    clearOnPageLoad: false,
    model: 'Sabine.model.user',
    storeId: 'myStore'
}
});

Соответствующая модель:

Ext.define('Sabine.model.user', {
extend: 'Ext.data.Model',

config: {
    fields: [
        {
            name: 'token',
            type: 'string'
        },
        {
            name: 'title'
        },
        {
            name: 'login'
        },
        {
            name: 'facebookId'
        },
        {
            name: 'firstName',
            type: 'string'
        },
        {
            name: 'lastName',
            type: 'string'
        },
        {
            name: 'nationality',
            type: 'string'
        },
        {
            name: 'birthDay',
            type: 'string'
        },
        {
            name: 'phone'
        },
        {
            name: 'mobile'
        },
        {
            name: 'street'
        },
        {
            name: 'city',
            type: 'string'
        },
        {
            name: 'zipCode',
            type: 'int'
        },
        {
            name: 'willingToTravel'
        },
        {
            name: 'pictureUrl'
        },
        {
            name: 'eMail'
        },
        {
            name: 'publicList'
        }
    ]
}
});

Пример просмотра:

Ext.define('Sabine.view.MeinAccount', {
    extend: 'Ext.Container',
    alias: 'widget.accview',
    config: {
        maxHeight: 480,
        maxWidth: 320,
    items: [{
        xtype: 'tabpanel',
        height: 430,
        maxHeight: 480,
        items: [
            {
            xtype: 'list',
            title: 'Allgemein',
            iconCls: 'home',
            modal: false,
            deferEmptyText: false,
            itemTpl: [
                '<table border = "0">',
                '<tr>',
                ' <td>Firstname</td>',
                ' <td>{firstName}</td>',
                ' <td>Last<name/td>',
                ' <td>{lastName}</td>',
                '</tr>',
                '<tr>',
                ' <td>Nationality</td>',
                ' <td>{nationality}</td>',
                '</tr>',
                '</table>'
            ],
            store: 'Sabine.store.UserStore'
     },

2 ответа

Решение

Пару мыслей о вашей проблеме:

  • у тебя есть поле publicList это не заявлено в вашей модели
  • store.load не принимает экземпляр модели, наоборот - загружает в ваше локальное хранилище данные с сервера
  • store.loadData или же store.loadRawData это ваш путь, однако упомянутое вами сообщение (Uncaught TypeError: Object[object Object] не имеет метода..) указывает на то, что вы не успешно получили экземпляр хранилища. Для этого вы должны сначала создать экземпляр магазина, а не просто объявить его; использование Ext.create метод для этого
  • если твой loginResponse.user уже в формате JSON, вы не должны использовать Ext.JSON.encode

Тебе стоит попробовать

success: function (response) {

    var loginResponse = response.responseText;
    ....
}
Другие вопросы по тегам