• ajax异步请求原理和过程


    AJAX异步请求原理和过程

    AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方法。
    
    AJAX 基于 JavaScript 和 HTTP 请求(HTTP requests)的,因为AJAX 通过在后台与服务器交换少量数据的方式,允许网页进行异步更新。这意味着有可能在不重载整个页面的情况下,对网页的一部分进行更新,通过 AJAX,你可以创建更好、更快以及更友好的 WEB                 
    应用程序
    Ajax 可以调用服务器任何资源,可以调用动态页面、静态页面,也可以调用json对象,但是由于浏览器无法解析二进制文件,故调用图片等时就会报错。
    
    调用json对象时,必须使用eval("(" + 返回的对象 + ")");,否则无法解析对象的资源。
    

    AJAX异步请求原理和过程:

    1、AJAX创建异步对象XMLHttpRequest :

    AJAX 的要点是 XMLHttpRequest 对象。不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。IE浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。如需针对不同的浏览器来创建此对象,我们要使用一条 "try             
    and catch" 语句。如下示例:
    
    <script type="text/javascript">
    function GetXmlHttpObject()
    {
      var xmlHttp=null;
      
    
        try{
             // Firefox, Opera 8.0+, Safari等浏览器创建XMLHttpRequest对象的方法
              xmlHttp=new XMLHttpRequest();
            }
       catch (e){
          // Internet Explorer浏览器创建XMLHttpRequest对象的方法
         try{
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//IE6.0以上的浏览器创建XMLHttpRequest对象的方法
           }
         catch (e){
            try{
               xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//IE6.0以下的浏览器创建XMLHttpRequest对象的方法
             }
            catch (e){
               alert("您的浏览器不支持AJAX!");
               return false;
             }
          }
        }
    
      return xmlHttp;
    }
    </script>
    
    
    首先声明一个保存 XMLHttpRequest 对象的 xmlHttp 变量。
    
    然后使用 XMLHttp=new XMLHttpRequest() 来创建此对象。这条语句针对 Firefox、Opera 以及 Safari 浏览器。假如失败,则尝试针对 Internet Explorer 6.0+ 的 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"),假如也不成功,则尝试针对 Internet Explorer         
    5.5+ 的 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")。
    
    假如这三种方法都不起作用,那么这个用户所使用的浏览器已经太过时了,他或她会看到一个声明此浏览器不支持 AJAX 的提示。
    

    2、操作XMLHttpRequest 对象:

    (1)设置请求参数(请求方式,请求页面的相对路径,是否异步)
    
    
    (2)设置回调函数,一个处理服务器响应的函数,使用 onreadystatechange ,类似函数指针,如 
    
      xmlHttp.onreadystatechange=function()
      {
        // 我们需要在这里写一些代码
      }
    
    (3)获取异步对象的readyState 属性:该属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。
    

      readyState 属性可能的值:
      0 请求未初始化(在调用 open() 之前)
      1 请求已提出(调用 send() 之前)
      2 请求已发送(这里通常可以从响应得到内容头部)
      3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
      4 请求已完成(可以访问服务器响应并使用它)

    在调用时,我们要向这个 onreadystatechange 函数添加一条 If 语句,来测试我们的响应是否已完成(意味着可获得数据):
    
      xmlHttp.onreadystatechange=function()
      {
        if(xmlHttp.readyState==4)
        {
          // 从服务器的response获得数据
        }
      }
    
    

    (4)判断响应报文的状态,若为200说明服务器正常运行并返回响应数据,

    (5)读取响应数据,可以通过 responseText 属性来取回由服务器返回的数据。

      xmlHttp.onreadystatechange=function()
      {
        if(xmlHttp.readyState==4){
    
          if(xmlHttp.status==200){
    
            document.myForm.time.value=xmlHttp.responseText;
    
          }
        }
      }
    
    

    示例如下:

    <script type="text/javascript">
    
    function ajaxFunction()
     {
       var xmlHttp=GetXmlHttpObject();//定义XMLHttpRequest对象
      
      xmlHttp.open("GET","****.ashx",true)//设置请求方法,请求的目标页面,以及是否异步
      xmlHttp.setRequestHeader("If-Modified-Since","0");
    
      xmlHttp.onreadystatechange=function(){  //定义XMLHttpRequest对象的onreadystatechange属性    
    
        if(xmlHttp.readyState==4) {   //判断XMLHttpRequest对象的状态 
          if(xmlHttp.status==200){
            document.myForm.time.value=xmlHttp.responseText;//通过XMLHttpRequest对象的responseText属性获取回传的数据 
          } 
        }
      } 
      xmlHttp.send(null);//发送异步请求 
    } 
    
    </script> 
    <form name="myForm"> 
      用户: <input type="text" name="username" onkeyup="ajaxFunction();" /> 
      时间: <input type="text" name="time" /> 
    </form> 
    </body>
     </html>
    
    
  • 相关阅读:
    mysql如何修改密码,root密码忘记怎么办?
    杂碎知识点
    mysql的数据类型4---字符串类型
    mysql的数据类型3---日期与时间类型
    mysql的数据类型1---浮点和定点类型
    mysql的数据类型1---整数类型
    安卓学习简记:基础知识(一)
    使用eclipse学习java第三课
    使用eclipse学习java第二课
    一些C和C++的常见问题集锦 ----不停更新
  • 原文地址:https://www.cnblogs.com/jiaozhuo/p/6703050.html
Copyright © 2020-2023  润新知