快捷搜索:

dojo0.31教程之六 dojo.io.IO dojo.io.BrowserIO

模块:dojo.io.IO

dojo.io.bind

处置惩罚哀求取回必要的数据并处置惩罚

这个函数是AJAX中最为紧张和有用的函数,dojo.io.bind这个类是用来处置惩罚客户端与办事器间通讯的,必要通讯的参数由工具dojo.io.Request所定义,详细通讯的措施则由别的一个工具Transport所供给。

是以,我们假如必要与办事器通讯,则应该定义一个Request工具,此中包括办事器地址及回调函数,例子中Requset都因此匿名工具要领定义的

虽然我们可以定义一个自己的Transport,然则显然不如直接使用现成的Transport方便。

Dojo里供给了一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransport,然则这个工具位于dojo.io.BrowserIO,是以,一样平常require dojo.io.IO时,还应该require dojo.io.BrowserIO

Usage Example:

dojo.io.bind({

url: "http://localhost/test.html", //要哀求的页面地址

mimetype: "text/html", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype,默觉得 "text/plain"

method:"GET", //默觉得"GET"

sync: false, //默觉得异步履行

useCache: false, //默觉得不应用页面缓存,留意这里的缓存并不是浏览器的缓存,而是Dojo自身所掩护的页面缓存

preventCache: false, //默觉得启用浏览器缓存,否则将经由过程自动增添不合的参数来确保浏览器缓存掉效

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted

error: function(type, error) { alert(error.message); }, //error is dojo.io.Error

timeout: function(type) { alert("哀求超时!"); }

});

你也可以用一个handle来处置惩罚所有的事故

dojo.io.bind({

url: "http://localhost/test.html", //要哀求的页面地址

mimetype: "text/html", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

handle: function(type, data, evt){

if(type == "load") { alert(data); } //data is that we wanted

else if (type == "error") { alert(data.message); } //data is the error object

else { ; } //other events maybe need handled

}

});

假如没有在Request中指定所用的transport,则Dojo会自动的在已注册的transports中探求能够处置惩罚这个Request的transport,假如不能找到,则返回指定的Request。下面是一个指定了transport的例子:

dojo.io.bind({

url: "http://localhost/test.html", //要哀求的页面地址

mimetype: "text/html", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

transport: "XMLHTTPTransport",

load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted

error: function(type, error) { alert(error.message); }, //error is dojo.io.Error

timeout: function(type) { alert("哀求超时!"); }

});

你还可以使用bind来获得一个JavaScript所定义的工具(留意mimetype必须要定义为"text/javascript")

testObj = dojo.io.bind({

url: "http://localhost/test.js", //test.js里定义了一个工具

mimetype: "text/javascript", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

handle: function(type, data, evt){

if(type == "load") { alert(data); } //data is a object or value

else if (type == "error") { alert(data.message); } //data is the error object

else { ; } //other events maybe need handled

}

});

下面是一个Post的例子:

dojo.io.bind({

url: "http://localhost/test.aspx", //要提交的页面地址

mimetype: "text/html", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

method: "POST",

formNode: dojo.byId("myForm"), //指定提交的Form名称

load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted

error: function(type, error) { alert(error.message); }, //error is dojo.io.Error

timeout: function(type) { alert("哀求超时!"); }

});

另一个Post的例子(without Form to post):

dojo.io.bind({

url: "http://localhost/test.aspx", //要提交的页面地址

mimetype: "text/html", //哀求的页面的类型,应该设置为与你哀求页面类型对应的mimetype

timeoutSeconds: 3000,//3秒后超时,假如为0则永不超时

method: "POST",

content: {a: 1, b: 2}, //要提交的数据

load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted

error: function(type, error) { alert(error.message); }, //error is dojo.io.Error

timeout: function(type) { alert("哀求超时!"); }

});

dojo.io.queueBind

无意偶尔,我们必要一次发出多个网页哀求,则应该应用dojo.io.queueBind,由于浏览器可能只容许同时发出有限个数的哀求,假如是应用dojo.io.bind的话,则有可能会申请不到新的XMLHttp工具而导致掉足。

用法与dojo.io.bind是一样的。

dojo.io.argsFromMap

用来把工具转换为URL的参数形式

Usage Example:

dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&b=2&a=1"

dojo.io.argsFromMap({name:"名称",value:"值"},"utf"); //will return "value=%E5%80%BC&name=%E5%90%8D%E7%A7%B0", 有中文的话应该指定utf款式,否则dojo.string.encodeAscii返回的编码是很怪异的

dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&a=1&c=3",着末一个参数可以节制指定名称的值呈现在着末

dojo.io.setIFrameSrc

设置IFrame的Src

Usage Example:

dojo.io.setIFrameSrc(dojo.byId("myFrame"), "http://localhost/test.htm"); //myFrame打开指定的网页

dojo.io.setIFrameSrc(dojo.byId("myFrame"), "http://localhost/test.htm", true); //myFrame打开指定的网页,并覆盖浏览器的历史记录

TODO: 弥补一个kwArgs的例子,我之前在网上望见过,可是现在无论若何也找不到相关的页面了,只好今后在举例了

模块:dojo.io.BrowserIO

基础上就供给了dojo.io.XMLHTTPTransport这个工具

XMLHTTPTransport一样平常能够满意我们的需求,然则其有几个限定:它不能传输文件,不能够成功履行跨域名的远程哀求,并且不支持 file:// 这样的协议

是以,根据利用要求,我们可能会必要选用其它的transport: dojo.io.IframeTransport, dojo.io.repubsubTranport, dojo.io.ScriptSrcTransport, ShortBusTransport

dojo.io.IframeTransport,用法与xmlhttp是一样的,其优点便是可以跨域,不存在任何的安然问题

假如Request指定的mimetype是text或javascript,返回的内容应该是放在第一个textarea里的内容,假如指定的mimetype是html,则IFrame里的html则是必要的内容。由于浏览器兼容的缘故原由,IframeTransport不能精确处置惩罚返回类型为XML的哀求。

关于Rpc,这个类似于Remoting的器械,也将在今后对其进行先容。

您可能还会对下面的文章感兴趣: