Sencha touch 2 - 在代理加载时显示响应(JSON字符串)

时间:2012-05-22 15:54:59

标签: sencha-touch sencha-touch-2

有没有办法输出我的商店在sencha touch 2中读取的json-string?

我的商店没有阅读记录,所以我想看看哪里出了问题。 我的商店定义如下:

Ext.define("NotesApp.store.Online", {
    extend: "Ext.data.Store",
           config: {
           model: 'NotesApp.model.Note',
           storeId: 'Online',
           proxy: {
               type: 'jsonp',
               url: 'http://xxxxxx.com/qa.php',
               reader: {
                   type: 'json',
                   rootProperty: 'results'
               }
           },
           autoLoad: false,
           listeners: {
               load: function() {   
                    console.log("updating");
                   // Clear proxy from offline store
                   Ext.getStore('Notes').getProxy().clear();
                   console.log("updating1");
                   // Loop through records and fill the offline store


                    this.each(function(record) {
                             console.log("updating2");
                             Ext.getStore('Notes').add(record.data);

                   });

                   // Sync the offline store
                   Ext.getStore('Notes').sync();
                   console.log("updating3");
                   // Remove data from online store
                   this.removeAll();
                    console.log("updated");
               }

           },
           fields: [
                    {
                    name: 'id'
                    },
                    {
                    name: 'dateCreated'
                    },
                    {
                    name: 'question'
                    },
                    {
                    name: 'answer'
                    },
                    {
                    name: 'type'                    
                    },
                    {
                    name: 'author'
                    }
                    ]
           }
});

4 个答案:

答案 0 :(得分:1)

您可以通过代理获取服务器返回的所有数据,如下所示:

store.getProxy().getReader().rawData

答案 1 :(得分:1)

您可以通过lasaro建议获取服务器返回的所有数据(javascript对象):

store.getProxy().getReader().rawData

要获取原始数据的JSON字符串(阅读器应该是JSON阅读器),您可以这样做:

Ext.encode(store.getProxy().getReader().rawData)

//or if you don't like 'shorthands':
Ext.JSON.encode(store.getProxy().getReader().rawData)

您也可以通过处理商店加载事件来获取它:

// add this in the store config
listeners: {
    load: function(store, records, successful, operation, eOpts) {
        operation.getResponse().responseText
    }
}

答案 2 :(得分:0)

据我所知,如果您使用已配置的proxy,则无法明确观察您的回复结果(如果您手动发送Ext.Ajax.requestExt.JsonP.request,这显然很容易)

但是,您仍然可以通过浏览器的开发者工具观看结果。

适用于Google Chrome:

当您启动应用程序并假设您的请求已完成时。切换到网络标签。左侧面板上的高亮链接是我从中获取数据的API网址。在右侧面板中,选择响应。响应结果将出现在那里。如果你什么都没有,很可能是你发出了错误的请求。

dev tool

希望这有帮助。

答案 3 :(得分:0)

您的响应json应该采用以下格式的Ajax请求

{results:[{"id":"1", "name":"note 1"},{"id":"2", "name":"note 2"},{"id":"3", "name":"note 3"}]}

id和name是模型NOte的属性。

对于jsonp,

在您的服务器端,从'回调'中获取价值。该值包含回调方法的名称。然后将该方法名称连接到结果字符串并写入响应。

然后json字符串应采用以下格式

callbackmethod({results:[{"id":"1", "name":"note 1"},{"id":"2", "name":"note 2"},{"id":"3", "name":"note 3"}]});