无法在网格视图中显示存储中的 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 网格面板
无法在网格面板中显示 JSON 数据。在 Grid 中只显示一个空白行