『壹』 本人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那裡也發給你,這個都是項目中的