dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO)

前端之家收集整理的这篇文章主要介绍了dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
模块: dojo.io.IO
dojo.io.bind
处理请求取回需要的数据并处理
这个函数 AJAX 中最为重要和有用的函数 dojo.io.bind 这个类是用来处理客户端与服务器间通讯的,需要通讯的参数由对象 dojo.io.Request 所定义,具体通讯的方法则由另外一个对象 Transport 所提供。 因此,我们如果需要与服务器通讯,则应该定义一个 Request 对象,其中包括服务器地址及回调函数,例子中 Requset 都是以匿名对象方式定义的 虽然我们可以定义一个自己的 ,但是显然不如直接利用现成的 方便。
Dojo
里提供了一个同时兼容 IE Firefox dojo.io.XMLHTTPTransport ,但是这个对象位于 dojo.io.BrowserIO ,因此,一般 requiredojo.io.IO 时,还应该 requiredojo.io.BrowserIO
UsageExample:
dojo.io.bind({
url:"http://localhost/test.html",//
要请求的页面地址
mimetype:"text/html",170); line-height: 165%; font-family: 宋体;">请求的页面的类型,应该设置为与你请求页面类型对应的
mimetype ,默认为 "text/plain"
method
"GET",170); line-height: 165%; font-family: 宋体;">默认为 "GET"
sync:false,170); line-height: 165%; font-family: 宋体;">默认为异步执行

useCache:false,170); line-height: 165%; font-family: 宋体;">默认为不使用页面缓存,注意这里的缓存并不是浏览器的缓存,而是
Dojo 自身所维护的页面缓存
preventCache:false,170); line-height: 165%; font-family: 宋体;">默认为启用浏览器缓存,否则将通过自动增加不同的参数来确保浏览器缓存失效

timeoutSeconds:3000,//3
秒后超时,如果为 0 则永不超时
load:function(type,data,evt){alert(data);},//typeshouldbe"load",dataisthatwewanted
error:function(type,error){alert(error.message);},//errorisdojo.io.Error
timeout:function(type){alert("
请求超时! ");}
});
你也可以用一个 handle 来处理所有的事件
dojo.io.bind({
url:"mimetype
timeoutSeconds:3000,170); line-height: 165%; font-family: 宋体;">则永不超时

handle:function(type,evt){
if(type=="load"){alert(data);}//dataisthatwewanted
elseif(type=="error"){alert(data.message);}//dataistheerrorobject
else{;}//othereventsmaybeneedhandled
}
});
如果没有在 中指定所用的 transport ,则 会自动的在已注册的 transports 中寻找能够处理这个 ,如果不能找到,则返回指定的 。下面是一个指定了 的例子 :
dojo.io.bind({
url:"

transport:"XMLHTTPTransport",
load:function(type,//errorisdojo.io.Error
timeout:function(type){alert("
你还可以利用 bind 来得到一个 Javas cript 所定义的对象(注意 必须要定义为 "text/javas cript"
testObj=dojo.io.bind({
url:"
http://localhost/test.js",//test.js
里定义了一个对象
mimetype:"text/javas cript",170); line-height: 165%; font-family: Verdana;">
handle:function(type,evt){
if(type=="load"){alert(data);}//dataisaobjectorvalue
elseif(type=="error"){alert(data.message);}//dataistheerrorobject
else{;}//othereventsmaybeneedhandled
}
});
下面是一个 Post 的例子 :
dojo.io.bind({
url:"http://localhost/test.aspx",170); font-family: 宋体;">要提交的页面地址

mimetype:"text/html",170); font-family: 宋体;">请求的页面的类型,应该设置为与你请求页面类型对应的
mimetype
timeoutSeconds:3000,170); font-family: 宋体;">秒后超时,如果为
0 则永不超时
method:"POST",
formNode:dojo.byId("myForm"),170); font-family: 宋体;">指定提交的
Form 名称

load:function(type,170); font-family: 宋体;">请求超时!
");}
});
另一个 (withoutFormtopost):
dojo.io.bind({
url:"要提交的数据
load:function(type,170); font-family: Verdana;">");}
});
dojo.io.queueBind
有时,我们需要一次发出多个网页请求,则应该使用 dojo.io.queueBind ,因为浏览器可能只允许同时发出有限个数的请求,如果是使用 dojo.io.bind 的话,则有可能会申请不到新的 XMLHttp 对象而导致出错。
用法与 是一样的。
dojo.io.argsFromMap
用来把对象转换为 URL 的参数形式
UsageExample:
dojo.io.argsFromMap({a:1,b:2,c:3});//willreturn"c=3&b=2&a=1"
dojo.io.argsFromMap({name:"
",value:" "},"utf");//willreturn"value=值&name=å��ç§°", 有中文的话应该指定 utf 格式,否则 dojo.string.encodeAscii 返回的编码是很怪异的
dojo.io.argsFromMap({a:1,c:3},"utf","c");//willreturn"b=2&a=1&c=3"
,最后一个参数可以控制指定名称的值出现在最后
dojo.io.setIFrameSrc
设置 IFrame Src
UsageExample:
dojo.io.setIFrameSrc(dojo.byId("myFrame"),"
http://localhost/test.htm");//myFrame
打开指定的网页
dojo.io.setIFrameSrc(dojo.byId("myFrame"),220);">http://localhost/test.htm
",true);//myFrame 打开指定的网页,并覆盖浏览器的历史记录 模块: dojo.io.BrowserIO
基本上就提供了 dojo.io.XMLHTTPTransport 这个对象
XMLHTTPTransport
一般能够满足我们的需求,但是其有几个限制:它不能传输文件,不能够成功执行跨域名的远程请求,并且不支持 file:// 这样的协议 因此,根据应用要求,我们可能会需要选用其它的 transport:dojo.io.IframeTransport,dojo.io.repubsubTranport,dojo.io.s criptSrcTransport,ShortBusTransport
dojo.io.IframeTransport
用法 xmlhttp 是一样的,其优点就是可以跨域,不存在任何的安全问题
如果 Request 指定的 mimetype text javas cript ,返回的内容应该是放在第一个 textarea 里的内容,如果指定的 html ,则 里的 则是需要的内容。因为浏览器兼容的原因, IframeTransport 不能正确处理返回类型为 XML 的请求。 关于 Rpc ,这个类似于 Remoting 的东西,也将在以后对其进行介绍。

猜你在找的Dojo相关文章