ajax的简单理解

0:同步和异步:
  1)同步就是“你”和“发送请求到响应完成这个过程”是同步的。
      你必须一同走完这个过程,之后才可以发起下一次请求。然后你和下一次的过程在一同走完,之后再请求下一次
  2)异步:就是“你”不用和“请求到响应这个过程”一起走完。当响应这个过程还没结束的时候,
       你可以再次发起请求。不用等着上次响应结束,------不用一起,不用同步。
  3)那么问题来了?同步,我们发起请求得到响应,就是得到了我们要的结果,然后在发送其他的请求...
                 异步,我们发起请求,在还没有得到结果时,又发送了下一次请求,那么上一次请求结果什么时候可以知道,
                 我们发送请求不就是为了得到响应结果么?
   4)可以这么理解:还是表单提交。当我们把表单内容全部写完,提交给服务器时,服务器会统一作出响应,
       表单的内容是否正确、表单的格式是否正确...等等。要有一项通不过,还得重新填,有没有一种方法可以把这个统一的响应分开呢?
       就是表单的内容做一个响应、表单的格式在坐一个响应、但是这种不是统一的响应必须是局部的,不能是全局的。
      人们想出一种方式:异步     
     那么怎么实现异步的呢?人们做出一个类XMLHttpRequest,这个类可以实现这个功能
 

1:用到的地方:注册时提示错误信息、搜索时提示、百度地图扩大局部扩大不是重新刷新页面......
2:作用:提高用户使用浏览器的舒适度。
3:原理:使用异步实现客户端浏览器局部刷新。
  1:同步:
     两个个特点:1)只有服务器响应完之后才可以发起下一次请求,----------让客户一只等待不好
          2)响应后客户端浏览器重新刷新-------------------------像注册信息一样,一项注册失败,其他都白填
  2:异步:
    1)不用服务器产生响应信息客户端也可以发请求:---客户不用等了心情好
    2)可以实现局部刷新,不用刷新整个页面
4:异步的具体实现方法:
   1):初始化XMLHttpRequest,得到对象xhr
   2):xhr.open();--建立和服务器的连接,有三个参数
       1:请求方式 get/post
       2:请求的URL,指定服务器端的资源
       3:请求是否为异步,true为异步,false为同步,第三个参数不写默认为异步
  
   3):xhr.send():发送请求,有一个参数
        如果是get请求:参数为null。get请求没有请球体,请求参数跟在URL后面
        如果是post请求:参数为请求参数。post请求参数单独打包。
   4):接收响应信息
        xhr.onreadystatechange();--发生状态变化时的事物控制,xhr的每一种状态都会调用这个方法
        xhr.readyState--请求的状态。有5种情况:-------------得到xhr的状态
       
        0:尚未初始化--------刚创建对象还没有调用open方法
        1:正在发送请求------调用open方法还没有调用send方法
        2:请求完成----------调用完成open方法了
        3:接收响应信息------服务器开始响应,但还没响应完成
        4:接收完成
       xhr.status---响应信息的状况
       200--表示请求成功
       202--请求被接收但处理没有完成
       400--错误的请求
       404--请求资源没有找到
       500--服务器内部错误
 
  在javascript中书写方法,方法的作用是向指定的servlet发起请求,并获取响应,将响应的内容
  输出在jsp页面内,两种情况:get和post请求;
  
  1:get请求
     1)创建XMLHttpRequest对象
     var xhr;
   function xmlht(){
    try{
       xhr=new XMLHttpRequest();
    }catch(){
     }try{
        xhr = new ActivXObject("Msxml2.XMLHTTP");
      }catch(){
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
       }
   }
    2)写一个方法用作发出请求和接受响应
        function xmlht1(){
           //初始化XMLHttpRequest
           xmlht();
           //建立链接
           xhr.open("GET","AServlet",true);
           //发送请求
           xhr.send(null);
           //接收响应数据
          xhr.onreadystatechange=function(){//接响应
          var id=document.getElementById("span");//获取html中的标签neme
          if(xhr.readyState==4&&xhr.status==200){//判断服务器是否响应完成
   id.innerHTML=xhr.responseText;//通过标签name获取值,并重新赋值为服务器                                                                                          
                                 //的响应信息,                              
              }
          }
        }
    2:post请求:
         var xhr;
   function xmlht(){
    try{
       xhr=new XMLHttpRequest();
    }catch(){
     }try{
        xhr = new ActivXObject("Msxml2.XMLHTTP");
      }catch(){
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
       }
   }
    2)写一个方法用作发出请求和接受响应
        function xmlht1(){
           //初始化XMLHttpRequest
           xmlht();
           //建立链接
           xhr.open("POST","AServlet",true);
           xhr.setRequestHeader("Content-type", "application/x-www-form-                                                         urlencoded")//设置请求头
           //发送请求
           xhr.send("username="username);
           //接收响应数据
          xhr.onreadystatechange=function(){//接响应
          var id=document.getElementById("span");//获取html中的标签neme
          if(xhr.readyState==4&&xhr.status==200){//判断服务器是否响应完成
    id.innerHTML=xhr.responseText;//通过标签name获取值,并重新赋值为服务器                                            
                                   //的响应信息,
              }
          }
        }
原文地址:https://www.cnblogs.com/xueershewang/p/6781882.html