Ajax入门实例

         Ajax,全称Asynchronous JavaScript And XML,是异步的Javascript和XML。想更多的了解Ajax的历史,请到百度百科(Ajax)。

          Ajax最主要的是解决什么样的问题呢?
          Ajax可以解决传统Web程序的一些弊端,提升用户使用系统体验度.
          传统Web程序,采用下面工作模式
          用户发送请求-->等待服务器处理-->页面响应
             a.用户在等待处理阶段,什么都不能做,无法进行下一步操作,连续性不强.
             b.整个页面刷新,处理中,需要很多数据,参与客户端和服务器的传输.
          Ajax就是所谓的异步刷新,在这里我们并不需要知道更多的原理,只要记住下面的几个简单代码,就可以应用这种Ajax技术:
      以验证用户名是否已存在为例(java):

       服务器端servlet代码

   

                response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String name=request.getParameter("name");
		//模拟数据库判断
		if("mm".equals(name)){
			out.println("用户名存在");
		}else{
			out.println("用户名可用");
		}
		out.flush();
		out.close();
        配置文件:提交url:http://localhost:8080/您的项目名称/checkname?username=

 

<servlet>
    <servlet-name>AjaxCheckNameServlet</servlet-name>
    <servlet-class>web.AjaxCheckNameServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>AjaxCheckNameServlet</servlet-name>
    <url-pattern>/checkname</url-pattern>
  </servlet-mapping>

     js脚本:

//获得ajax核心对象XMLHttpRequest
function getXMLHttpRequest(){
      var xhr;
		   //判断浏览器类型
	  if(window.XMLHttpRequest)
		   //非ie
		   xhr=new XMLHttpRequest();
	  }else{
		  //ie
	       xhr=new ActionXObject("Microsoft.XMLHTTP");
	  }
    return xhr;
}


 

//ajax get请求---验证用户名是否已存在为例
 function(){
     //得到username值
	 var username=document.getElementById("username").value;
	 //获得XMLHttpRequest对象
	 var xhr=getXMLHttpRequest();
	 //open方法发送请求
	 xhr.open(
		  "get",//get方式请求
		  "checkname?username="+username,//请求url
		   true);//true 表示异步刷新
	 //注册一个监听器(即当xhr状态发生改变产生了readystatechange事件,
	 //该事件会由一个匿名函数处理。我们需要在函数里面获得服务器返回的
	 //数据,然后更新页面)
     xhr.onreadystatechange=function(){
		 var span=document.getElementById("msg");
	     //readyState 对象与服务器通讯的状态
		 // 0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)
		 // 1 (初始化)对象已建立,尚未调用send方法
		 // 2(发送数据)send方法已调用
		 // 3(数据传送中)已接受部分数据
		 // 4 (响应结束)接受了所有数据
		 if(xhr.readyState==4){
			   if(xhr.status==200){//200为程序正常执行
			       //ajax 只获得两种数据 (text 和dom)
			    var txt=xhr.responseText;
			    //var xml=xhr.responseXML;
				span.innerHTML=txt;
			   }else{
				   //程序出现错误时
				   span.innerHTML="系统繁忙,请稍后再试!";
			   }
		 }else{
		   //请求响应结束前---您的操作
		   span.innerHTML="正在处理中.....";
		 }
	 };
     //只有调用send方法之后,请求才会真正发送
	 xhr.send(null);
 }

//ajax post请求---验证用户名是否已存在为例
 function(){
     //得到username值
	 var username=document.getElementById("username").value;
	 //获得XMLHttpRequest对象
	 var xhr=getXMLHttpRequest();
	 //open方法发送请求
	 xhr.open(
		  "post",//post方式请求
		  "checkname",//请求url
		   true);//true 表示异步刷新
	 //注册一个监听器(即当xhr状态发生改变产生了readystatechange事件,
	 //该事件会由一个匿名函数处理。我们需要在函数里面获得服务器返回的
	 //数据,然后更新页面)
	 xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     xhr.onreadystatechange=function(){
		 var span=document.getElementById("msg");
	     //readyState 对象与服务器通讯的状态
		 // 0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)
		 // 1 (初始化)对象已建立,尚未调用send方法
		 // 2(发送数据)send方法已调用
		 // 3(数据传送中)已接受部分数据
		 // 4 (响应结束)接受了所有数据
		 if(xhr.readyState==4){
			   if(xhr.status==200){//200为程序正常执行
			       //ajax 只获得两种数据 (text 和dom)
			    var txt=xhr.responseText;
			    //var xml=xhr.responseXML;
				span.innerHTML=txt;
			   }else{
				   //程序出现错误时
				   span.innerHTML="系统繁忙,请稍后再试!";
			   }
		 }else{
		   //请求响应结束前---您的操作
		   span.innerHTML="正在处理中.....";
		 }
	 };
     //只有调用send方法之后,请求才会真正发送
	 //post请求是用send方法传递参数的
	 xhr.send('username='+username);
 }

  Ajax注意的两个问题:

    1.IE浏览器缓存问题,如果使用get方式发送请求,浏览器会将数据缓存起来,这样,当再次发送消息时,如果地址不变,ie不会真正的向服务器发请求,而是将之前缓存的数据显示给用户
          解决方式:
        一、用post方式
        二、在请求地址后面添加一个随机时间
               如'checkname?username='+username+'&sid='+new Date().getTime()

     2.中文乱码问题
        解决方式:用post方式

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值