『壹』 本人extjs入门,现在正在学习用Extjs4,我想问一下extjs怎么接收解析json数据
JSON可以理解为JavaScript的对象序列化的字符串, 你看下JSON的内容, 会发现和代码中写的对象字面量基本一样, 所以使用eval方法即可将JSON转换为对象.
Ext仅仅是简单的封装eval方法, 以适应不同标准的JSON
源代码:
Ext.util.JSON.decode = function(json){
return eval('(' + json + ')');
};
你可以自己alert出来看
//示例
Ext.onReady(function() {
Ext.Ajax.request({
url: 'getmsg.action?user=1',
method: 'GET',
success: function(resp, options) {
//标准JSON字符串 '{"data": [{"msg":"abcd"}]}'
var jsonObj = Ext.util.JSON.decode(resp.responseText);
//显示模态提示框
Ext.Msg.alert('title', jsonObj.data[0].msg, function(btn){
//Ext的模态窗口仅仅是屏蔽操作, 并不阻塞线程, js也没有线程, 这点非常重要
//提示框的按钮事件回调
alert(btn); //后执行
});
alert(1); //先执行
}
//failure: function() {...} //可选的
});
});
Ext的ApiDoc做得非常好, 对学习有很大的帮助. 千万不要看一些所谓的中文版, 有很多机器翻译不说, 还有很多未校对的错误.
另: 学习ExtJS要掌握闭包的概念, 这个是js一个非常重要的特性, Ext使用该特性模拟了继承及封装, 在一定程度上实现了面向对象编程. 当然你也可以无视Ext的继承机制, 使用js本身的原型继承(prototype)
『贰』 extjs中JsonStore数据获取
var store=new Ext.data.JsonStore({ data:"这里是你保存数据的变量,本地数据", url:"如果是从服务端获得数据,则填写服务端地址回,如果是本地数据则答不需要此属性", field:["这里是字段的名如{name:"字段名"}"]});store.getAt("第几条数据").get("字段名") //获得data里的数据store.getCount() //获得数据总共有多少条store.getTotalCount() //获得TotalCount 至于获得 code、uesr 值,API里好象没有介绍
『叁』 ExtJS 解析json数据 动态创建grid表格
store 在ext里叫数据存储器,你上面写的太繁复,ext提供高级store
首先你要弄清楚这个过程:
store 的load函数会触发数据存储器根据httpProxy设定的url去请求数据,请求回来的数据,要用数据读取器Reader对象,比如用你的JsonReader,每一条数据对应一个Ext.data.Record对象,你第三个问题问reader里的数组有什么用,它是Ext.data.Record的简写,你可以把那个数组写成一下这样来代替你的那个数组,不过通常为了简单起见我们都写简写
varRecordTemplate=newExt.data.Record.create([
/*name对应的值就是存储在本条record中的key值,当你需要
*从某一条数据中取出某个字段是,你就必须用这个key
*/
{name:'firstname'},
/*上面说name对应的值你读取后的key索引值,那
*mapping对应的值就是你从后台请求回来的每一条数据元素中的一个key,
*意思就是,我从请求回来的数据中读取
*key为occupation的值存储在store中一条record的job索引key中
*/
{name:'job',mapping:'occupation'}
});
http proxy
1>.SimpleStore = Store + MemoryProxy + ArrayReader 用作读取静态本地数据
2>.JsonStore = Store + HttpProxy + JsonReader 用作读取后台json信息
vards=newExt.data.JsonStore(
{
url:"",//请求地址
paramNames:{arg0:0},//提交请求,附带的参数,通常你需要使用分页,排序,可以在这里
fields:["key"],//对应Reader里返回json对象中的每个key,在grid里也对应ColumnModel列模型中的dataIndex
});
2,返回的json数据必须有数量count这个变量吗?直接是条目的列表不行吗?
答:不用必须,这个count是完全自定义的,你需要分页工具条时,需要指定总共多少条数据,需要一个字段存储总条数数据,至于是count,还是total,只要和你后台返回的json中去取值时对应就可以了,分页工具条,会以count作为key在你请求回来的json去取值。这是一个前后和后台的约定字段,只要保持一致,起什么名字都无关。
直接是条目的列表是行的。其实 重要的你要理解 前台 和 后台 的约定,这不是说那一边行不行,你前台定义了什么样的格式来读,你后台就要提供什么样的数据,不然读不到数据,响应,你后台提供了什么样的数据格式,前台就要按照这个格式来读。 这是 一种约定,而数据格式是完全可以自定义的。那么你安装xml格式都可以。如果你使用的读取器前台控件规定了读取方式,那么你 后台返回的数据就要严格按照这种格式来组织。不然你后台返回的数据,前台不认识就无法读取,这是有严格逻辑的。
你可以把 root:"",totalRecords:"",id:;"" 这都都不要,后台返回的数据 是json Array,就是你说的条目列表就可以了。
『肆』 Extjs中将后台的array数据转换为Json格式怎么做,急求
你在后台时 直接转json 传到前台 本来就是 下面的这种格式了
你者并需要加一个首拦迹json包 然后直接衡局把array数组转为 json就可以了
『伍』 extjs json后台有数据,到前台就显示undefined,是怎么回事
alert(response)看下有没有得到值!评论里面写不了代码,我修改下答案作为回复:回
你打印一下console.log(response)这个看下,答是不是就是你相面写下来的对象{"message":"操作成功!","fileName":"QQ截图20131111083729.png","success":true}这个,如果是的话,剩下的你自己就知道了吧!我估计extjs把返回的东西已经是处理过了,不用.responseText做处理!
『陆』 extjs有没有把字符串转换成json数据的方法
有的,extjs 可以野困使用 Ext.util.JSON.decode(字颂源念符裂者串) 的方式,将符合JSON规则的字符串,转换为 json对象。
Ext.util.JSON.decode 可以使用缩写 Ext.decode 代替,更为简洁。
『柒』 Extjs ajax返回的json数组 赋值给table
首先,Ajax请求数据,(用的是Jquery的Ajax)
复制代码 代码如下:
<script>
$(function(){
$('#test').click(function(){
$.ajax({
url:'__APP__/Article/jsonTest',
type:'post',
success:function(data){
var item;
$.each(data,function(i,result){
item
=
"<tr><td>"+result['num']+"</td><td>"+result['title']+"<
/td><td>"+result['credate']+"</td><td>操作<
/td></tr>";
$('.table').append(item);
});
}
})
})
});
</script>
后台处理请求,返回Json格式数据(用的是Thinkphp返回)
复制代码 代码如下:
$list = $File->group('num')->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->ajaxReturn($list,'JSON');
html部分
复制代码 代码如下:
<table class="table table-striped table-bordered table-condensed">
<tr><th>编号</th><th>名称</th><th>创建时间</th><th>操作</th></tr>
</table>
『捌』 extjs 5.0 要如何拼写json才能被treeStore动态读取
后台是什么氏行烂语言?只要定义一个类似的类结构。
class A {
string id;
string url;
int parent_id;
bool leaf;
string iconCls;
string text;
List<A> children;
}.从数据库中读出带做数据生成这个类,用Json()返回就可以歼漏
『玖』 ExtJS的读取JSON数据读不到
第一、查看你的json是否正确
第二、我的写法,请参考
var itemsPerPage = 50;
var store = Ext.create('Ext.data.Store', {
autoLoad: { start: 0, limit: itemsPerPage },
fields: ['ZWWLDW_DWBH', 'ZWWLDW_DWMC', 'ZWWLDW_DWMM', 'ZWWLDW_DWQX', 'ZWWLDW_DWBZ'],
pageSize: itemsPerPage,
proxy: {
type: 'ajax',
url: 'HandlerFun.ashx?Type=CMManager',
reader: {
type: 'json',
root: 'rows',
totalProperty: 'total'
}
}
});
如果放我这个还不行,等一下,我把grid那里也发给你,这个都是项目中的