锁定老帖子 主题:深入挖掘AJAX
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-23
有一半清醒,有一半醉!这可能是众位看客看过之前两篇博客后的感觉.没关系,继续闷头看起!!! 你的脑壳一定要建立这样一种信念,ajax不是新的技术,而是对客户端技术js/dom/css的综合运用而已.所以掌握ajax,最重要是在锤炼你的js/dom/css功底.从web应用角度来看,无非就是处理两种事情 1.request-请求即浏览器向服务器请求数据 我们来看看在request方都需要做哪些事情呢? 1.1XMLHttpRequest对象的构建 ajax方式的请求是借助浏览器的一个对象XMLHttpRequest来实现.而获取XMLHttpRequest对象在不同类型的浏览器中的方式不同,火狐浏览器直接通过new XMLHttpRequest()来完成,而对于IE浏览器来说,则需要根据IE的不同版本来实现XMLHttpRequest对象的构建.当获得XMLHttpRequest对象后保存在一个变量中,命名成http_request. 1.2设置响应处理函数 在发送请求数据的时候,就需要提前设置谁来处理服务器返回的数据,对客户端来讲,当然就是某个js函数了.这里设置响应处理函数用这样一句代码来实现: http_request.onreadystatechange=doHandler; 其中,onreadystatechange是XMLHttpRequest对象上的一个属性,整句代码的意思是"当服务器将数据返回后,将数据交给函数名为doHandler的函数负责处理".函数doHandler需要你单独编写. 1.3构建请求服务器地址和发送数据 服务器地址的构建是根据客户端的请求方式的不同而不同,如果客户端请求方式为post时,这时,地址和请求数据的构建是分离的.在前文的实例当中,我们是将数据发送到服务器端的一个叫做CheckAccountServlet来处理,那么请求地址和数据的构建如下: var url = CheckAccountServlet; var data = "name=zhangsan&password=123" 如果服务器端地址为/abc/cfg/CheckAccountServlet,那么这里就应该变成var url = abc/cfg/CheckAccountServlet,总之这里的地址是跟你所请求的服务器地址始终保持一致. 而对于请求方式为get时,这时,地址和请求数据一起来构建成一个完成的url.示例代码如下: var url = "CheckAccountServlet?name=zhangsan&password=123" 在发送时,就将url直接以get方式发送到服务器上. 1.4连接服务器 就跟你操作db一样,在真正执行sql语句之前,你必须先跟db连接上.同样的,ajax要想发送数据则也需先跟服务器建立连接,建立连接代码如下 http_request.open(method,url,flag); 其中,method代表客户端请求方式,取值为post或者get url代表服务器地址(具体构建方式见1.3) flag取值为true或者false,如果为true表示只有和服务器建立连接成功后才执行发送数据,否则,相反(建议设置为true) 1.5.发送请求数据 如果请求方式为get,由于数据已经一并附加到url后面,所以,发送时直接调用http_request.send(null)即可. 如果请求方式为post,则需要将按照格式构建好的数据传递给send函数,并且在调用send函数前还需加上另外一个行代码,整个代码如下: http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); http_request.send(data);
2.response-响应即服务器将响应数据发送回浏览器 我们再来看看在response方都需要做哪些事情呢? 2.1获取请求数据 跟你获取表单数据一样,获取ajax提交上来的数据也是采用request.getParameter()来实现 2.2处理请求数据 具体的数据处理就是你的事情了(做你想做的一切事情!) 2.3输出响应数据 要想把响应数据输出给客户端,只能通过输出流的方式来实现. PrintWriter out = response.getWriter();//获取输出流 out.println("Some message");//开始输出响应数据 ....... out.close();//关闭输出流 这里,需要重点强调几点: 2.3.1.如果输出信息中包含中文,则需要在获取输出流之前添加response.setContentType("text/html;charset=gb2312"); 2.3.2.设置让浏览器无缓存,添加response.setHeader("Cache-Control","no-cache"); 2.3.3.输出信息只允许两种形式,分别是文本信息和xml格式的字符串信息.如果是文本信息,则按照前面的方式直接输出即可.如果是xml格式的字符串信息,则需要更改2.3.1.提到的代码response.setContentType("text/html;charset=gb2312")为response.setContentType("text/xml;charset=gb2312") 至此,服务器端的响应信息已经输出完成(但我们的路还差最后一步哦,加点油,我们马上成功啦!!!) 2.4.客户端处理服务器返回的数据 那么,在哪来处理服务器返回的数据呢?还记得1.2提到的doHandler函数吗? 对了,doHandler函数就负责处理返回的数据的.来看看,它都做了哪些事情 /*具体负责处理服务器返回数据的函数*/ 这里的函数doResponse函数就是起到doHandler的作用(说过了嘛,doHandler函数名称可以任意取的嘛,别纠着函数名不放好不好). 关键的地方在于通过什么来获取服务器给我们返回的数据.XMLHttpRequest对象上提供两个属性供我们抉择. 2.4.1.responseText-如果服务器端返回的是普通的文本信息的话,用它就够了. 2.4.2.responseXML-如果服务器端返回的是xml格式的数据,则需要用它.而如果用它的话,那么就需要dom技术来解析其中的数据喽!(见下回分解) 大功告成,一切的一切都已经OK,请问,您酒醒了吗?
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-10
挺不错,等待下回
|
|
返回顶楼 | |
浏览 3593 次