无法在网格视图中显示存储中的 Json 数据(使用 Sencha 框架)

Posted

技术标签:

【中文标题】无法在网格视图中显示存储中的 Json 数据(使用 Sencha 框架)【英文标题】:Failing in Display the Json data from store in grid view (Using Sencha Framework) 【发布时间】:2018-03-07 12:26:03 【问题描述】:

我是 Sencha 的新手。我得到网络中数据的响应,但是数据没有加载到网格中。如果我尝试在代理中使用静态数据,网格加载这些值。请帮我解决这个问题。

请求网址: http://localhost:8080/list?_dc=1506420300660&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback1

Response:

["name":"Thanos","email":"thanos@infgauntlet.com","phone":"5555555555","name":"Spider Man","email":"peter.parker@thebugle.net","phone":"2125555555","name":"Daredevil","email":"matt.murdock@nelsonandmurdock.org","phone":"2125555555","name":"The Maker","email":"reed.richards@therealreedrichards.net","phone":"2125555555","name":"Rocket","email":"rocket@starlordstinks.com","phone":"5555555555","name":"Galactus","email":"galactus@worldeater.com","phone":"5555555555","name":"Silver Surfer","email":"norrin.radd@zenn-la.gov","phone":"5555555555","name":"Hulk","email":"bruce.banner@hulkout.org","phone":"2125555555","name":"Squirrel Girl","email":"doreen.green@nannyservices.net","phone":"2125555555","name":"Thor","email":"thor@odinson.gov","phone":"5555555555"]



Store:
Ext.define('CRUD.store.Personnel', 
    extend: 'Ext.data.Store',

    alias: 'store.personnel',

    fields: ['name', 'email', 'phone'],

    // data: [
    //      name: 'Jean Luc', email: "jeanluc.picard@enterprise.com", phone: "555-111-1111" ,
    //      name: 'Worf', email: "worf.moghsson@enterprise.com", phone: "555-222-2222" ,
    //      name: 'Deanna', email: "deanna.troi@enterprise.com", phone: "555-333-3333" ,
    //      name: 'Data', email: "mr.data@enterprise.com", phone: "555-444-4444" 
    // ],

    proxy: 
        headers: 
            "Content-Type": "application/json"
        ,
        type: 'jsonp', //cross domain calls - json parser
        url: 'http://localhost:8080/list',
        reader: 
            type: 'json',
        ,
        listeners: 

            load: function(store, records, success, operation, data) 
                // Ext.each(records, function(rec) 
                //     Ext.Msg.alert("test")
                //     console.log(rec.get('name'));
                // );

                console.log(JSON.stringify(success));
            ,
            exception: function(proxy, response, operation) 
                // exception handling 
                console.log(response);
            
        
    ,
    // proxy: 
    //     type: 'memory',
    //     reader: 
    //         type: 'json',
    //     
    // ,
    autoLoad: true,
);



View: List.js
/**
 * This view is an example list of people.
 */
Ext.define('CRUD.view.main.List', 
    extend: 'Ext.grid.Panel',

    xtype: 'home',

    requires: [
        'CRUD.store.Personnel'
    ],

    title: 'Heroes',

    store: 
        type: 'personnel'
    ,

    columns: [
         text: 'Name', dataIndex: 'name', flex: 1 ,
         text: 'Email', dataIndex: 'email', flex: 1 ,
         text: 'Phone', dataIndex: 'phone', flex: 1 
    ],

    listeners: 
        select: 'onItemSelected',
    ,
);

【问题讨论】:

【参考方案1】:

您正在使用 JSONP 代理,但您的响应是纯 JSON。这是行不通的,因为两者之间的数据格式不同。您必须切换到 JSON 代理,或者将服务器返回的答案更改为 JSONP 格式。我建议您切换到 JSON 代理。

要让 JSON 跨域工作,您的服务器必须

接受使用 OPTIONS 方法发送的调用(所谓的“飞行​​前请求”)并返回状态 200, 并在调用飞行前请求以及实际的 POST/GET 调用时返回特殊标头。

如果您不返回它们,您可以从收到的错误消息中直接推断出您必须返回的标头。例如,

请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:2020' 因此不允许访问。

意味着您必须在服务器响应中添加一个标头Access-Control-Allow-Origin: http://localhost:2020

【讨论】:

感谢您的回复。我已将响应转换为 jsonp 格式。它奏效了。非常感谢。我在节点 js 中更改了这样的输出响应: res.jsonp(result)

以上是关于无法在网格视图中显示存储中的 Json 数据(使用 Sencha 框架)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 json 和 sql 将数据导入 EXTJS 网格面板

无法在我的颤振演示应用程序中的列表视图中显示网格视图

交错网格视图无法在 2 列中显示数据

无法在网格面板中显示 JSON 数据。在 Grid 中只显示一个空白行

如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?

json 数组未显示在 extjs 网格中