JR 精品文章 - ajax 入门 1
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
ajax 入门 1
包子 原创   更新:2008-03-28 10:00:09  版本: 1.0   

本日开始写ajax入门,因为感觉终于有点开窍了 - - (上班时间写博客希望不要被老板看到)
有问题请到包子的博客留言
hi.baidu.com/j2eedoc

理论上的东西不说了,诸如什么异步请求之类,好处很多,很大程度上提高B/S系统的上用户体验

首先每一个基于JavaScript的ajax应用(VBScript还有PHP都可以一样使用ajax)总是由一个创建XHR(xmlHttpRequest)对象的函数开始的,XHR(异步请求对象)是ajax的灵魂

  var xmlrequest;
  function createXMLHttpRequest(){
   if(window.XMLHttpRequest){
    //mozilla 浏览器
    xmlrequest = new XMLHttpRequest();
   }else if(window.ActiveXObject){
    //IE浏览器
    try{
     xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
     try{
     xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
     
     }
    }
   }
  }

这里不需要什么解释,每一个应用都是这样开始,几乎是模式化的东西,判断浏览器种类,然后开始创建XHR对象

然后编写一个触发应用的函数,说简单点就是页面上一有一个按钮,一按这个按钮,就开始调用XHR对象来在后台发送一个异步请求,也就是 "触发第一个激活" 的函数

    function getXML(){
   //初始化XHR对象;
   createXMLHttpRequest();
   //设置请求响应的URL
   var uri="buildXMLAction";
   //打开与服务器响应地址的链接
   xmlrequest.open("POST",uri,true);
   //设置请求头
   xmlrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
   //设置处理响应的回调函数
   xmlrequest.onreadystatechange = processResponse;
   //发送请求
   xmlrequest.send(null);
  }

这里唯一需要注意的是 "回调函数" , 几乎所有的书上都把 "回调函数" 写成processResponse, 一开始笔者就被绕进去了,以为这个函数的名称和功能是不变的,也就是必须写成processResponse,这一度成为我"开窍"的最大障碍.

既然是"激活应用的函数",第一步就是激活刚才我们第一个编写的"创建XHR对象"的函数

   createXMLHttpRequest();
注意这个函数没有返回值,因为我在脚本最开始定义了一个全局变量xmlHttpRequest,注意它是一个变量,名字随便起


然后进行了一些准备工作

 //设置请求响应的URL
   var uri="buildXMLAction";
   //打开与服务器响应地址的链接
   xmlrequest.open("POST",uri,true);
   //设置请求头
   xmlrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");


关于open函数和send函数可以去查baidu,很简单的

然后调用回调函数

 xmlrequest.onreadystatechange = processResponse;


这里onreadystatechange和所有大家见过的onClick onMouseOver onMouseOut 一样,不过是一个事件

onreadystatechange是一个"只能用在XHR对象上"的 "当XHR对象的状态(readyState)改变"时调用函数的一个事件

processResponse 被叫做回调函数,不过它只是一个普通函数,你可以把它写成

 xmlrequest.onreadystatechange = pr; 

这个函数的名字自己定义,内容也自己编写

    function processResponse(){
   //判断相应是否完成
   if(xmlrequest.readyState == 4){
    //判断响应是否成功
    if(xmlrequest.status == 200){
     //信息已经成功返回,开始处理信息
     var text = xmlrequest.responseText;
     //在页面输出所有请求头
     document.getElementById("output").innerText = text;
    }else{
     //页面不正常
     window.alert("您所请求的页面异常");
    }
   }
  }

这里responseText是XHR对象的一个属性,用于接收被请求的servlet或别的什么东西返回的响应

它还有一个类似的属性 responseXML用于接收一个XML对象

页面上用

  <body>
  <input type="button" value="getXML" onclick="getXML()"/><br>
    <div id="output"></div>
  </body>

这样每次点击按钮,就发送了一个局部请求

服务器用servlet

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out
    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

  
  Random rand = new Random(System.currentTimeMillis());
  out.write("这里是返回信息");
  out.flush();
  out.close();
 }

注意这里用的是doGet方法,但是请求里用的是doPost,需要把open函数的参数改为get

或者将doPost 方法导向 doGet

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request,response);
 }


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     23       1
作者其它文章: 作者全部文章
评论人:lxxsl 发表时间: Fri Mar 28 21:55:55 CST 2008
看看
评论人:xndx 发表时间: Sat Mar 29 16:29:33 CST 2008
学习一下[:)]
评论人:liuxi 发表时间: Wed Apr 02 20:27:35 CST 2008
很有帮助!谢谢[good]
评论人:huangzongwu 发表时间: Sun Apr 13 04:32:58 CST 2008
最近正好学jsp和ajax,不错!
评论人:sfpskywood 发表时间: Mon Apr 14 12:48:42 CST 2008
学习下
评论人:asd19841111 发表时间: Mon Apr 14 16:20:55 CST 2008
好啊
继续
评论人:laonongfu 发表时间: Mon Apr 14 21:00:55 CST 2008
学到挺多的!谢谢了!
评论人:emptyJUN 发表时间: Tue Apr 15 10:57:01 CST 2008
不错,~~~
评论人:gdhyyanglang 发表时间: Sat Apr 19 01:18:15 CST 2008
复习!

这个文章共有 9 条评论
主题: Jsf + spring + hibernate 开发框架介绍 上一篇文章
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: 用jsp动态输出excel文档和中文乱码问题的解决


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号