﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-梦在飞-文章分类-Dojo</title><link>http://www.blogjava.net/vso/category/16109.html</link><description>JAVA EE</description><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 09:13:06 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 09:13:06 GMT</pubDate><ttl>60</ttl><item><title>Introduction to dojo.io.bind</title><link>http://www.blogjava.net/vso/articles/79310.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Mon, 06 Nov 2006 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/79310.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/79310.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/79310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/79310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/79310.html</trackback:ping><description><![CDATA[ dojo.io包很好的封装了XMLHTTP和其它比较复杂的传输机制（iframe等）。另外"transports"传输器以插件形式（实现的统一的接口）出现，另外dojo对于XMLHTTP的支持解决了back button的问题。我们先抛开细节，看看dojo提供给我们的public API.<br />   dojo.io的许多不可思议的功能都由bind()方法来实现。（可能脚本语言或不定参数的语言都喜欢这样，说实话，我不喜欢）。dojo.io.bind()是一个普通的匿名请求API，它的底层可以是不同的传输机制(queues of iframes, XMLHTTP, mod_pubsub, LivePage, 等)。dojo会尝试选择最好的传输机制，如果你的环境支持多种传输机制，XMLHTTP会是dojo的首选。bind()方法的参数是一个简单的匿名对象，当然这个对象的属性是异常灵活的。<br /> 如果你要得到一个text文件，可能代码如下：<br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/sampleData.txt&quot;" target="_blank">http://foo.bar.com/sampleD...</a>,<br />   load: function(type, data, evt){ /*do something w/ the data */ },<br />   mimetype: "text/plain"<br />});<br /></div><br />和prototype.js/YUI等差不多，简单的代码可以得到数据。可能你也想到，如果出现错误怎么 办，简单注册一个错误处理函数就好了：<br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/sampleData.txt&quot;" target="_blank">http://foo.bar.com/sampleD...</a>,<br />   load: function(type, data, evt){ /*do something w/ the data */ },<br />   error: function(type, error){ /*do something w/ the error*/ },<br />   mimetype: "text/plain"<br />});<br /></div><br /><br />dojo也可以把所有的处理放到一个函数里，如下:<br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/sampleData.txt&quot;" target="_blank">http://foo.bar.com/sampleD...</a>,<br />   handle: function(type, data, evt){<br />       if(type == "load"){<br />           // do something with the data object<br />       }else if(type == "error"){<br />           // here, "data" is our error object<br />           // respond to the error here<br />       }else{<br />           // other types of events might get passed, handle them here<br />       }<br />   },<br />   mimetype: "text/plain"<br />});<br /></div><br />考虑性能原因，Ajax经常重服务器返回一段可执行的javascript代码段，在浏览器中eval(它)。你只要指定mimetype: "text/javascript" 就<br /><br />可以了，dojo会自动为你 eval这些javascript代码，<br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/sampleData.js&quot;" target="_blank">http://foo.bar.com/sampleD...</a>,<br />   load: function(type, evaldObj){ /* do something */ },<br />   mimetype: "text/javascript"<br />});<br /></div><br />你也可以指定你使用哪种传输器 如 XMLHTTPTransport:<br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/sampleData.js&quot;" target="_blank">http://foo.bar.com/sampleD...</a>,<br />   load: function(type, evaldObj){ /* do something */ },<br />   mimetype: "text/plain", // get plain text, don't eval()<br />   transport: "XMLHTTPTransport"<br />});<br /></div><br /><br /><span style="COLOR: #dc143c">Being a jack-of-all-trades, bind() also supports the submission of forms via a request (with the single caveat that it won't do file upload over XMLHTTP):<br />????得看看代码？是否url会覆盖action.</span><br /><div class="code"><br />dojo.io.bind({<br />   url: "<a href="http://foo.bar.com/processForm.cgi&quot;" target="_blank">http://foo.bar.com/process...</a>,<br />   load: function(type, evaldObj){ /* do something */ },<br />   formNode: document.getElementById("formToSubmit")<br />});<br /></div><br />呵呵，不错吧。下面看看几个传输器。<br /><br /><strong>Transports:</strong><br />dojo.io.bind和其它相关函数与服务器通信有几种方法，叫Transport，每种Transports可能都有缺陷，因此在特定场合你必须选择合适的transport。<br />默认的transport是大家熟悉的 XMLHttp.<br /><br /><strong>XMLHttp</strong><br /><br />xmlhttp在大部分情况下工作的很好，但它不能上传文件，不能跨域工作，也不能在file://协议下工作。（dojo也代替的方案）<br /><br />例子代码:<br /><div class="code"><br />&lt;script type="text/javascript"&gt;   dojo.require("dojo.io.*");   <br />function mySubmit({     <br />   dojo.io.bind ({       <br />   url: 'server.cfm',      <br />   handler: callBack,           <br />   formNode: dojo.byId('myForm')    <br /> });  <br />}   <br />function callBack(type, data, evt) {  <br />   dojo.byId('result').innerHTML = data;  <br />}<br />&lt;/script&gt;<br /></div><br /><br /><strong>IFrame I/O：</strong><br />IFrame I/O transport是有用的，它可以上传文件.  例子代码:<br /><br /><div class="code"><br />&lt;script type="text/javascript"&gt;   dojo.require("dojo.io.*");   <br />dojo.require("dojo.io.IframeIO"); <br />function mySubmit() {     <br /> dojo.io.bind ({           url: 'server.cfm',       <br />   handler: callBack,       <br />   formNode: dojo.byId('myForm')       });   <br />}   <br />function callBack(type, data, evt) {      <br /> dojo.byId('result').innerHTML = data;   <br />}<br />&lt;/script&gt;<br /></div><br />The response type from the above URL can be text, html, or JS/JSON. <br />这种响应类型的url可以是text,html或者js/json. <img src ="http://www.blogjava.net/vso/aggbug/79310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2006-11-06 09:02 <a href="http://www.blogjava.net/vso/articles/79310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>