ExtJs Grid问题!

放羊的曾阿郎 2013-11-05 08:54:53
这我的项目的结构
Model:
Ext.define("user",{
extend : 'Ext.data.Model',
fields : [
{name: 'name', type: 'string'},
{name: 'email', type: 'string'},
{name: 'phone', type: 'string'}
]
});

store:
Ext.create("Ext.data.Store",{
model : "user",
storeId : "usersStore",
/*data: [
{ name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
{ name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
{ name: 'Homer', email: 'home@simpsons.com', phone: '555-222-1244' },
{ name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
]*/
proxy : {
type: 'ajax',
url : './TestData.jsp',
reader: {
type: 'json',
root: 'users'
},
writer : {
type:"json"
}
},

autoLoad : true
});


Grid:
function(){
Ext.onReady(function(){
var s = Ext.data.StoreManager.lookup("usersStore");
window.alert(s.getCount());

Ext.tip.QuickTipManager.init();

Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store: Ext.data.StoreManager.lookup("usersStore"),
width: 400,
height: 200,
title: 'Grid',
columns: [
{text: 'Name',sortable: true,dataIndex: 'name'},
{text: 'Email Address',sortable: true,dataIndex: 'email'},
{text: 'Phone Number',sortable: true,dataIndex: 'phone'}
]
});
})
})();


jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>
<head>
<title>My JSP 'TestData.jsp' starting page</title>
</head>

<body>
<%
System.out.print("{\"total\":\"3\", \"users\":[{ \"name\": \"Lisa\", \"email\": \"lisa@simpsons.com\", \"phone\": \"555-111-1224\"},{ \"name\": 'Bart', \"email\": \"bart@simpsons.com\", \"phone\": \"555-222-1234\" }]}");
%>
</body>
</html>
最后显示的结果是:

本人新手刚接触这玩意儿,很多的不懂,求大家帮忙看看。
...全文
883 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
我知道问题的所在了,弄了一天了,我在Jsp中是System.out.print("{'items':[{'name':'Lisa','email':'lisa@simpsons.com','phone':'555-111-1224'},{'name':'Bart','email':'bart@simpsons.com','phone':'555-222-1234'}]}");这是输出后后台去了,我去,去掉system就ok了,谢谢各位热心大哥们!
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 17 楼 u012724674 的回复:
System.out.print("{'name':'Bart','email':'bart@simpsons.com','phone':'555-222-1234'}"); 这种
还是不行,我这个配置对吗? Ext.define("user",{ extend : 'Ext.data.Model', fields : [ {name: 'name', type: 'string'}, {name: 'email', type: 'string'}, {name: 'phone', type: 'string'} ] }); var store = Ext.create("Ext.data.Store",{ model : "user", storeId : "usersStore", /*data: [ { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' }, { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' }, { name: 'Homer', email: 'home@simpsons.com', phone: '555-222-1244' }, { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' } ],*/ proxy : { type: 'ajax', url : './TestData.jsp', reader: { type: 'json', root: 'items' } }, autoLoad : true }); window.alert("store:" + store.getCount()); jsp:中是 System.out.print("{'items':[{'name':'Lisa','email':'lisa@simpsons.com','phone':'555-111-1224'},{'name':'Bart','email':'bart@simpsons.com','phone':'555-222-1234'}]}"); 这个书出来是没有错的,我去json验证了是对的,我怀疑是store配置错了!
u012724674 2013-11-05
  • 打赏
  • 举报
回复
System.out.print("{'name':'Bart','email':'bart@simpsons.com','phone':'555-222-1234'}"); 这种
u012724674 2013-11-05
  • 打赏
  • 举报
回复
不行aaaaaaaaaaaaaaaa
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 14 楼 u012724674 的回复:
我汗大哥,代理分好多种,你后台返回格式用aJAX不行,如果是{();()}这中就是OK
这个可以吗? System.out.print("{'list':{'name':'Bart','email':'bart@simpsons.com','phone':'555-222-1234'}}");
u012724674 2013-11-05
  • 打赏
  • 举报
回复
我汗大哥,代理分好多种,你后台返回格式用aJAX不行,如果是{();()}这中就是OK
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 12 楼 u012724674 的回复:
那前台可以直接接到 var storeUser = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : '/enhancement/equipMaster_search.action', method : 'POST' }), reader : new Ext.data.JsonReader({ totalProperty: 'total',root : 'list' }, [ {name : 'equipnum', mapping : 'equipnum'}, {name : 'demoynI', mapping : 'demoynI'}, {name : 'demoyn', mapping : 'demoyn'}, {name : 'useynI', mapping : 'useynI'}, {name : 'useyn', mapping : 'useyn'}, {name : 'prdtype', mapping : 'prdtype'}, {name : 'prdsrnum', mapping : 'prdsrnum'}, {name : 'remark1', mapping : 'remark1'}, {name : 'remark2', mapping : 'remark2'}, {name : 'salesgCode', mapping : 'salesgCode'}, {name : 'gssDate', mapping : 'gssDate'}, {name : 'gsfDate', mapping : 'gsfDate'}, {name : 'createDate', mapping : 'createDate'}, {name : 'updateDate', mapping : 'updateDate'}, {name : 'stprd', mapping : 'stprd'}, {name : 'style', mapping : 'style'}, {name : 'prdtypeCode', mapping : 'prdtypeCode'}, {name : 'credt', mapping : 'credt'} ]), listeners :{ 'load' : function(store,recodes,options){ if(store.getCount() == 0){ alert('查询结果有0条记录'); } } } }); 格式就不整理啦root那个list你换成你后台检出表头就可以
为啥用ajax代理不行啊。你帮我看看我这个问题在哪里,我要搞清楚,不然以后还是不会,麻烦了。
u012724674 2013-11-05
  • 打赏
  • 举报
回复
那前台可以直接接到 var storeUser = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : '/enhancement/equipMaster_search.action', method : 'POST' }), reader : new Ext.data.JsonReader({ totalProperty: 'total',root : 'list' }, [ {name : 'equipnum', mapping : 'equipnum'}, {name : 'demoynI', mapping : 'demoynI'}, {name : 'demoyn', mapping : 'demoyn'}, {name : 'useynI', mapping : 'useynI'}, {name : 'useyn', mapping : 'useyn'}, {name : 'prdtype', mapping : 'prdtype'}, {name : 'prdsrnum', mapping : 'prdsrnum'}, {name : 'remark1', mapping : 'remark1'}, {name : 'remark2', mapping : 'remark2'}, {name : 'salesgCode', mapping : 'salesgCode'}, {name : 'gssDate', mapping : 'gssDate'}, {name : 'gsfDate', mapping : 'gsfDate'}, {name : 'createDate', mapping : 'createDate'}, {name : 'updateDate', mapping : 'updateDate'}, {name : 'stprd', mapping : 'stprd'}, {name : 'style', mapping : 'style'}, {name : 'prdtypeCode', mapping : 'prdtypeCode'}, {name : 'credt', mapping : 'credt'} ]), listeners :{ 'load' : function(store,recodes,options){ if(store.getCount() == 0){ alert('查询结果有0条记录'); } } } }); 格式就不整理啦root那个list你换成你后台检出表头就可以
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
我换成使用内联的数据不使用代理就可以显示:



显示的结果:
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 9 楼 u012724674 的回复:
你debug跟一下看看后台返回的形式是什么样是data:{();()}这样的还是{();()}
这是后台换回的数据: {"items" : [{"name" : "Lisa","email" : "lisa@simpsons.com","phone" : "555-111-1224"}, {"name" : "Bart","email" : "bart@simpsons.com","phone" : "555-222-1234"}]}
u012724674 2013-11-05
  • 打赏
  • 举报
回复
你debug跟一下看看后台返回的形式是什么样是data:{();()}这样的还是{();()}
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 4 楼 u012724674 的回复:
关键你想问什么啊全部看不懂?
就是关于在使用Grid的时候store中代理使用ajax请求jsp返回一个json字符串,在解析或者请求的时候出错了,之前没有学过json,所以有点强求的感觉
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复

这个响应好像不对,不知道哪里问题
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 5 楼 yibey 的回复:
[quote=引用 3 楼 u012634473 的回复:] [quote=引用 2 楼 yibey 的回复:] 后台输出的时候不要带任何的body与 html标签,简单说一个标签都不要有,只有输出那个字符串。否则前台接收到的信息,Extjs会认为无法识别
访问后后台打印出来的,感觉也没错啊![/quote] 你上面的输出结构更你的例子不一样,是不是你不小心写错这个了, 比如你的proxy里的root是 users 而你的截图不是。。 另外一般这种问题,从几个角度入手,使用firebug看看 你的ajax请求是否发出去了 ,并且看下返回是否是正确的返回,然后看下你的grid的各个config[/quote] 这是我重新改了的,store我已经把root改成items这个了。
yibey 2013-11-05
  • 打赏
  • 举报
回复
引用 3 楼 u012634473 的回复:
[quote=引用 2 楼 yibey 的回复:] 后台输出的时候不要带任何的body与 html标签,简单说一个标签都不要有,只有输出那个字符串。否则前台接收到的信息,Extjs会认为无法识别
访问后后台打印出来的,感觉也没错啊![/quote] 你上面的输出结构更你的例子不一样,是不是你不小心写错这个了, 比如你的proxy里的root是 users 而你的截图不是。。 另外一般这种问题,从几个角度入手,使用firebug看看 你的ajax请求是否发出去了 ,并且看下返回是否是正确的返回,然后看下你的grid的各个config
u012724674 2013-11-05
  • 打赏
  • 举报
回复
关键你想问什么啊全部看不懂?
放羊的曾阿郎 2013-11-05
  • 打赏
  • 举报
回复
引用 2 楼 yibey 的回复:
后台输出的时候不要带任何的body与 html标签,简单说一个标签都不要有,只有输出那个字符串。否则前台接收到的信息,Extjs会认为无法识别


访问后后台打印出来的,感觉也没错啊!
yibey 2013-11-05
  • 打赏
  • 举报
回复
后台输出的时候不要带任何的body与 html标签,简单说一个标签都不要有,只有输出那个字符串。否则前台接收到的信息,Extjs会认为无法识别
wilsonyun 2013-11-05
  • 打赏
  • 举报
回复
建议你用firefox的fireBug去调试这段程序,看返回的JSON字符串格式是否有问题。
u012724674 2013-11-05
  • 打赏
  • 举报
回复
你把贴结了啊大哥,我块没分啊

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧