AJAX学习

好久没碰AJAX了,最近感觉要用所以拿出来复习下:

       AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。AJAX带来的用户体验是有目共睹的, 传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。而 AJAX能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
        当然AJAX也有些缺点:
        它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。
        一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax;

  用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是让人头痛的事;  

        Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等。
        对串流媒体的支持没有FLASH、Java Applet好。

总结XMLHttpRequest的五步方法:
1.建立XMLHttpRequest对象
2.注册回调函数
3.使用open方法设置和服务器端交互的基本信息
4.设置发送的数据,开始和服务器交互
5.在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器返回数据,更新页面内容。

=========================华丽的分割线======================================
下面我们就来做一个简单的例子吧:
检测用户名是否存在,首先我们创建一个web project:
在index.jsp中加入输入框,提交按钮,还有我们的核心,javascript代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>AJAX</title>
    <script type="text/javascript" language="javascript">
        var xmlhttp;
        function submit()
        {
            //1.创建XMLHttpRequest对象
            if(window.XMLHttpRequest){
                //IE7,FireFox等 alert("IE7");
                xmlhttp=new XMLHttpRequest();
                if(xmlhttp.overideMimeType){
                    xmlhttp.overrideMimeType("text/xml");
                }
            }else if(window.ActiveXObject){
                //IE6,IE5等 alert("IE5");
                var activexName=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0",
                       "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0",
                       "MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
                for(var i=0;i<activexName.length;i++){
                     try {
						xmlhttp=new ActiveObject(activexName[i]);
						break;
					} catch (e) {
					}
                }
            }
            
            if(xmlhttp==undefined||xmlhttp==null){
                alert("当前浏览器不支持XMLHttpRequest对象,请更换对象!");
                return;
            }
            //alert(xmlhttp);
            //2.注册回调方法,希望在服务器的数据返回给xmlhttp对象后,可以执行回调方法
           //不能写成callback(),我们只需要将方法名给他即可
            xmlhttp.onreadystatechange=callback;
            
            //获取文本框中用户的输入内容
            var userName=document.getElementById("UserName").value;
          
            //3.设置和服务器交互的对应参数,这边我们使用的是get,使用post后面会有所改动
            xmlhttp.open("GET","Ajax1?username="+userName,true);
            
            //4.设置向服务器端发送的数据,启动和服务器端的交互
            //使用GET就不需要填写了,直接写成null
            xmlhttp.send(null);
        }
        
        function callback(){
            //判断和服务器端的交互是否完成,还要判断是否正确返回数据
            if(xmlhttp.readyState==4)
            {
                //表示和服务器端的交互已经完成
                if(xmlhttp.status==200)
                {
                    //表示服务器正确返回数据
                    //纯文本数据
                    var message=xmlhttp.responseText;
                    //XML数据对应的DOM对象的接受方法
                    //使用前提是服务器需要设置content-type为text/xml
                    //var domXml=xmlhttp.responseXML;
                    
                    //向div标签中填充文本内容
                    var div=document.getElementById("message");
                    div.innerHTML=message;
                }
            }
        } 
    </script>
	
  </head>
  
  <body>
    <input type="text" id="UserName" name="username"/>
    <input type="submit" value="检验用户名" οnclick="submit()"/><br/>
    <div id="message"></div>
  </body>
</html>
 

而我们在服务器端,就是我们写的servlet中代码是很简单的(在web.xml中配上我们的servlet):
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=gb2312");
		PrintWriter out = response.getWriter();
		try {
			String name=request.getParameter("username");
			if (name==null) {
				out.println("用户名不能为空!");
			}else {
				String username=new String(name.getBytes("ISO8859-1"),"GB2312");
				if (username.equals("sudalyl")) {
					out.println("用户名【"+username+"】已经存在!");
				}else {
					out.println("用户名【"+username+"】可以注册!");
				}
		   }
		 }catch (Exception e) {
			 e.printStackTrace();
		}finally{
			out.close();
		}
		
	}
 

好了,一个简单的AJAX实例就搞定了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值