dojo學習第二天 ajax異步請求之綁定列表
更新時間:2011年08月29日 23:35:27 作者:
在上一篇《dojo學習第一天 Tab選項卡》,我們學到了,怎么用dojo的選項卡插件來制作更易于用戶使用的表單,所有的一切都是為了使用更加方便,一切都是為了用戶的體驗
用戶不喜歡滾動條,于是我們做成了選項卡切換,用戶不喜歡刷新頁面,于是我們就要使用ajax了,前些年,幾乎每個web端開發(fā)人員,都以懂得一點點ajax而自豪,但知道使用ajax是遠遠不夠的,因為技術是為人而服務的,不能濫用技術,你總不能為了驗證一個文本框textbox而去異步請求一次。我還遇到過有人,更新用戶信息的時候,使用ajax更新,用戶信息中的圖片,又使用回發(fā)來更新,一個更新中,先ajax卡在那,然后再回發(fā),你說這是多么2的行為?這種人還不少,我還遇到過有人用ajax更新后再location定位一下,我就不明白了,他那ajax有啥意義?純是為了顯擺他知道有這么個東西。
說到ajax,不得不說下跨域的問題,就是你異步請求到其它域名下的文件時,出現(xiàn)了訪問安全問題,網(wǎng)上說得很多解決方法,大都是忽悠人的,不過還是有兩種絕對可行的地,比如aa.com下想異步訪bb.com下的cc.ashx:
1。我們可以在aa.com下建dd.ashx文件,然后用ajax訪問dd.ashx文件,這時,dd.ashx再去訪問bb.com下的cc.ashx,因為后臺的訪問是沒有跨域問題的,所以這時就不存在跨域了,因為你異步訪問的還是aa.com同域的文件dd.ashx。至于dd.ashx怎么訪問bb.com我就不多說了,可以搜下小偷程序,原理差不多。
2。jsonp返回,這種方法現(xiàn)在比較流行,因為第一種多了一次請求,速度難免會有影響。jsonp這個名字,我覺得一點都不好,我更喜歡叫它"json回調",它的原理是<script src="http://bb.com/cc.ashx"></script>,你是否已經(jīng)看出來了,這樣引用外部JS文件是不存在跨域的,這里跟json有何關系呢?jsonp就是在服務端返回一個json對象,在客戶端進行回調執(zhí)行這個對象的相關操作,是否越聽越不清楚了?我也不誤導你們了,自己去搜吧。
所以呢,json在整個js學習中都是至關重要的,(這個話題轉得有點硬) ,一般ajax返回的也都是json,所以在dojo里,對json又有了一些新的處理,我們看下面的代碼:
var jsons=[{},{}];
jsons[0].url="http://www.dbjr.com.cn";
jsons[0].text="腳本之家";
jsons[1].url="http://www.lovewebgames.com";
jsons[1].text="我的網(wǎng)站";
var list=document.getElementById("list");
dojo.forEach(jsons,function(onejson){
var li=document.createElement("li");
li.innerHTML=dojo.string.substitute("<a href='${url}'>${text}</a>",onejson});,);
list.appendChild(li);
還是一句句來解釋,不因事小而忽略,首先我聲明了一個數(shù)組對象jsons,里面放的是兩json對象,分別給它的url和text賦值,我為什么要分開這么幾行寫,主要是為了好理解,你也可以寫成如下一行:
var jsons=[{url:"http://www.dbjr.com.cn",text:"腳本之家"},{url:"http://www.lovewebgames.com/",text:"我的網(wǎng)站"}];
然后我們遍歷這個數(shù)組,在這里我使用的是dojo的forEach方法,它有兩個參數(shù),一個是要遍歷的對象,第二個是一個函數(shù)handle(你叫它句柄也好,叫它委托也行),它有個參數(shù),就是遍歷的每一項。最后我還用到了一個字符串模版來得到json里的屬性值,${url}就相當于取了onjson.url的值,${text}=onejson.text。例子請點擊這里
現(xiàn)在我們要做個常用的列表綁定,他擁有一些常見的功能,行樣式交替,列寬度可更拖動,可選擇排序,算是一個標準的基礎表格,如下圖所示:
做這個又要引用新的組件了, 還有新的針對表格主題樣式,MF的,直接上完代碼再解釋:
<style>
@import url(../dijit/themes/tundra/tundra.css);
@import url(../dojo/resources/dojo.css);
@import url(../dojox/grid/resources/tundraGrid.css);
</style>
<script>
dojo.require("dojo.parser");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojox.grid.DataGrid");
</script>
這里新加了tundraGrid.css這個樣式,用來控制表格外觀,ItemFileReadStore這個文件是用存儲數(shù)據(jù)源的,dataGrid是表格聲明文件.調用如下所示:
<div dojoType="dojo.data.ItemFileReadStore"
jsId="wishStore" url="services/cigar_wish_list.json">
</div>
<table id="grid" dojoType="dojox.grid.DataGrid" width='100%' store="wishStore" clientSort="true" autoHeight="true" autoWidth="true">
<thead>
<tr>
<th field="description" width="15em">Cigar</th>
<th field="size">Length/Ring</th>
<th field="origin">Origin</th>
<th field="wrapper">Wrapper</th>
<th field="shape">Shape</th>
</tr>
</thead>
</table>
第一行,我們把數(shù)據(jù)源存儲在了一個擴展屬性jsId="wishStore"的div上,然后在table上關聯(lián)store到上面的數(shù)據(jù)源上,最后在每一列上用擴展屬性field來綁定要顯示的字段,這樣就算綁定成功,DataGrid里還有一些其他的屬性,這里有clientSort(排序)、autoHeight(自動寬度)等等,具體其他的請看官網(wǎng)上的介紹
http://dojotoolkit.org/reference-guide/dojox/grid/DataGrid.html
今天的內容就這么多了,可能有點淺顯,不過,剛入門,還是慢慢來得好。具體的示例請點擊這里查看。
說到ajax,不得不說下跨域的問題,就是你異步請求到其它域名下的文件時,出現(xiàn)了訪問安全問題,網(wǎng)上說得很多解決方法,大都是忽悠人的,不過還是有兩種絕對可行的地,比如aa.com下想異步訪bb.com下的cc.ashx:
1。我們可以在aa.com下建dd.ashx文件,然后用ajax訪問dd.ashx文件,這時,dd.ashx再去訪問bb.com下的cc.ashx,因為后臺的訪問是沒有跨域問題的,所以這時就不存在跨域了,因為你異步訪問的還是aa.com同域的文件dd.ashx。至于dd.ashx怎么訪問bb.com我就不多說了,可以搜下小偷程序,原理差不多。
2。jsonp返回,這種方法現(xiàn)在比較流行,因為第一種多了一次請求,速度難免會有影響。jsonp這個名字,我覺得一點都不好,我更喜歡叫它"json回調",它的原理是<script src="http://bb.com/cc.ashx"></script>,你是否已經(jīng)看出來了,這樣引用外部JS文件是不存在跨域的,這里跟json有何關系呢?jsonp就是在服務端返回一個json對象,在客戶端進行回調執(zhí)行這個對象的相關操作,是否越聽越不清楚了?我也不誤導你們了,自己去搜吧。
所以呢,json在整個js學習中都是至關重要的,(這個話題轉得有點硬) ,一般ajax返回的也都是json,所以在dojo里,對json又有了一些新的處理,我們看下面的代碼:
復制代碼 代碼如下:
var jsons=[{},{}];
jsons[0].url="http://www.dbjr.com.cn";
jsons[0].text="腳本之家";
jsons[1].url="http://www.lovewebgames.com";
jsons[1].text="我的網(wǎng)站";
var list=document.getElementById("list");
dojo.forEach(jsons,function(onejson){
var li=document.createElement("li");
li.innerHTML=dojo.string.substitute("<a href='${url}'>${text}</a>",onejson});,);
list.appendChild(li);
還是一句句來解釋,不因事小而忽略,首先我聲明了一個數(shù)組對象jsons,里面放的是兩json對象,分別給它的url和text賦值,我為什么要分開這么幾行寫,主要是為了好理解,你也可以寫成如下一行:
var jsons=[{url:"http://www.dbjr.com.cn",text:"腳本之家"},{url:"http://www.lovewebgames.com/",text:"我的網(wǎng)站"}];
然后我們遍歷這個數(shù)組,在這里我使用的是dojo的forEach方法,它有兩個參數(shù),一個是要遍歷的對象,第二個是一個函數(shù)handle(你叫它句柄也好,叫它委托也行),它有個參數(shù),就是遍歷的每一項。最后我還用到了一個字符串模版來得到json里的屬性值,${url}就相當于取了onjson.url的值,${text}=onejson.text。例子請點擊這里
現(xiàn)在我們要做個常用的列表綁定,他擁有一些常見的功能,行樣式交替,列寬度可更拖動,可選擇排序,算是一個標準的基礎表格,如下圖所示:

復制代碼 代碼如下:
<style>
@import url(../dijit/themes/tundra/tundra.css);
@import url(../dojo/resources/dojo.css);
@import url(../dojox/grid/resources/tundraGrid.css);
</style>
<script>
dojo.require("dojo.parser");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojox.grid.DataGrid");
</script>
這里新加了tundraGrid.css這個樣式,用來控制表格外觀,ItemFileReadStore這個文件是用存儲數(shù)據(jù)源的,dataGrid是表格聲明文件.調用如下所示:
復制代碼 代碼如下:
<div dojoType="dojo.data.ItemFileReadStore"
jsId="wishStore" url="services/cigar_wish_list.json">
</div>
<table id="grid" dojoType="dojox.grid.DataGrid" width='100%' store="wishStore" clientSort="true" autoHeight="true" autoWidth="true">
<thead>
<tr>
<th field="description" width="15em">Cigar</th>
<th field="size">Length/Ring</th>
<th field="origin">Origin</th>
<th field="wrapper">Wrapper</th>
<th field="shape">Shape</th>
</tr>
</thead>
</table>
第一行,我們把數(shù)據(jù)源存儲在了一個擴展屬性jsId="wishStore"的div上,然后在table上關聯(lián)store到上面的數(shù)據(jù)源上,最后在每一列上用擴展屬性field來綁定要顯示的字段,這樣就算綁定成功,DataGrid里還有一些其他的屬性,這里有clientSort(排序)、autoHeight(自動寬度)等等,具體其他的請看官網(wǎng)上的介紹
http://dojotoolkit.org/reference-guide/dojox/grid/DataGrid.html
今天的內容就這么多了,可能有點淺顯,不過,剛入門,還是慢慢來得好。具體的示例請點擊這里查看。
相關文章
Dojo 學習筆記入門篇 First Dojo Example
Dojo學習筆記入門篇,第一個小例子, 剛開始學習dojo的朋友可以參考下。2009-11-11利用Dojo和JSON建立無限級AJAX動態(tài)加載的功能模塊樹
2007-03-03dojo 之基礎篇(三)之向服務器發(fā)送數(shù)據(jù)
dojo 之基礎篇(三)之向服務器發(fā)送數(shù)據(jù)...2007-03-03