1

有没有办法输出我的商店在 sencha touch 2 中读取的 json 字符串?

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

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

4 回答 4

1

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

store.getProxy().getReader().rawData
于 2012-08-07T14:00:01.840 回答
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)

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

// add this in the store config
listeners: {
    load: function(store, records, successful, operation, eOpts) {
        operation.getResponse().responseText
    }
}
于 2013-04-22T10:06:14.867 回答
0

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

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

id 和 name 是您的模型的属性 注意。

对于 jsonp,

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

那么json字符串应该是以下格式

callbackmethod({results:[{"id":"1", "name":"note 1"},{"id":"2", "name":"note 2"},{"id":"3", "name":"note 3"}]});
于 2012-05-24T03:28:37.407 回答
0

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

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

对于谷歌浏览器:

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

开发工具

希望这可以帮助。

于 2012-05-22T18:40:10.747 回答