dojo学习第二天 ajax异步请求之绑定列表


Posted in Javascript onAugust 29, 2011

用户不喜欢滚动条,于是我们做成了选项卡切换,用户不喜欢刷新页面,于是我们就要使用ajax了,前些年,几乎每个web端开发人员,都以懂得一点点ajax而自豪,但知道使用ajax是远远不够的,因为技术是为人而服务的,不能滥用技术,你总不能为了验证一个文本框textbox而去异步请求一次。我还遇到过有人,更新用户信息的时候,使用ajax更新,用户信息中的图片,又使用回发来更新,一个更新中,先ajax卡在那,然后再回发,你说这是多么2的行为?这种人还不少,我还遇到过有人用ajax更新后再location定位一下,我就不明白了,他那ajax有啥意义?纯是为了显摆他知道有这么个东西。

说到ajax,不得不说下跨域的问题,就是你异步请求到其它域名下的文件时,出现了访问安全问题,网上说得很多解决方法,大都是忽悠人的,不过还是有两种绝对可行的地,比如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返回,这种方法现在比较流行,因为第一种多了一次请求,速度难免会有影响。jsonp这个名字,我觉得一点都不好,我更喜欢叫它"json回调",它的原理是<script src="http://bb.com/cc.ashx"></script>,你是否已经看出来了,这样引用外部JS文件是不存在跨域的,这里跟json有何关系呢?jsonp就是在服务端返回一个json对象,在客户端进行回调执行这个对象的相关操作,是否越听越不清楚了?我也不误导你们了,自己去搜吧。

所以呢,json在整个js学习中都是至关重要的,(这个话题转得有点硬) ,一般ajax返回的也都是json,所以在dojo里,对json又有了一些新的处理,我们看下面的代码:

var jsons=[{},{}]; 
jsons[0].url="https://3water.com"; 
jsons[0].text="三水点靠木"; 
jsons[1].url="http://www.lovewebgames.com"; 
jsons[1].text="我的网站"; 
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);

还是一句句来解释,不因事小而忽略,首先我声明了一个数组对象jsons,里面放的是两json对象,分别给它的url和text赋值,我为什么要分开这么几行写,主要是为了好理解,你也可以写成如下一行:

var jsons=[{url:"https://3water.com",text:"三水点靠木"},{url:"http://www.lovewebgames.com/",text:"我的网站"}];
然后我们遍历这个数组,在这里我使用的是dojo的forEach方法,它有两个参数,一个是要遍历的对象,第二个是一个函数handle(你叫它句柄也好,叫它委托也行),它有个参数,就是遍历的每一项。最后我还用到了一个字符串模版来得到json里的属性值,${url}就相当于取了onjson.url的值,${text}=onejson.text。例子请点击这里

现在我们要做个常用的列表绑定,他拥有一些常见的功能,行样式交替,列宽度可更拖动,可选择排序,算是一个标准的基础表格,如下图所示:

dojo学习第二天 ajax异步请求之绑定列表
做这个又要引用新的组件了, 还有新的针对表格主题样式,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这个文件是用存储数据源的,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>

第一行,我们把数据源存储在了一个扩展属性jsId="wishStore"的div上,然后在table上关联store到上面的数据源上,最后在每一列上用扩展属性field来绑定要显示的字段,这样就算绑定成功,DataGrid里还有一些其他的属性,这里有clientSort(排序)、autoHeight(自动宽度)等等,具体其他的请看官网上的介绍
http://dojotoolkit.org/reference-guide/dojox/grid/DataGrid.html
       今天的内容就这么多了,可能有点浅显,不过,刚入门,还是慢慢来得好。具体的示例请点击这里查看。
Javascript 相关文章推荐
JS 页面自动加载函数(兼容多浏览器)
May 18 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
Oct 11 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
JSON相关知识汇总
Jul 03 Javascript
AngularJS基础 ng-options 指令详解
Aug 02 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 Javascript
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 #Javascript
新浪微博字数统计 textarea字数统计实现代码
Aug 28 #Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 #Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 #Javascript
Javascript 面向对象编程(一) 封装
Aug 28 #Javascript
Javascript继承机制的设计思想分享
Aug 28 #Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 #Javascript
You might like
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
一个简单计数器的源代码
2006/10/09 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
JavaScript 基础问答三
2008/12/03 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
elementui的默认样式修改方法
2018/02/23 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Pyqt5实现英文学习词典
2019/06/24 Python
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
追悼会上的答谢词
2014/01/10 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
海弦WR-800F
2022/04/05 无线电