zoukankan      html  css  js  c++  java
  • 初识Ajax

    本节要点:

    • 什么是Ajax
    • XMLHttpRequest对象
    • 创建Ajax的过程

    1         什么是AJAX

    AJAX是Asynchronous JavaScript  And XML的缩写,但是,很多被认为是“Ajax”的页面并没有使用JavaScript或xml,所以把Ajax定义为一种构建Web页面的方法,使页面像桌面应用一样具有响应性和交互性,这种说法更合适。AJAX的主要用途是使用JavaScript从服务器获取数据而不必刷新整个页面。其中AJAX拆分开来解释:

    • Asynchronous:发送请求后不等返回结果,由回调函数处理结果
    • JavaScript:向服务器发起请求,获得返回结果,更新页面
    • XML:封装数据

    2         XMLHttpRequest对象

    XMLHttpRequest是整个Ajax技术的灵魂。可以说没有XMLHttpRequest,就没有Ajax。Ajax技术的核心是异步发送请求,而XMLHttpRequest则是异步发送请求的对象。

    XMLHttpRequest对象不是一个国际标准。在不同浏览器中有不同的实现。要实现能够跨越浏览器运行的Ajax应用,必须考虑所有的使用场合。使用时必须根据浏览器采用不同的语法进行创建。但对每一个都进行判断不合实际,可以利用JavaScript的异常处理机制实现跨浏览器的XMLHttpRequest对象创建脚本。

    示例:

    var xmlhttp;

    //IE浏览器

    try{

         xmlhttp= new ActiveXObject('Msxml2.XMLHTTP');

    }catch(e){

          try{

                            xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');

          }catch(e){

                  try{

                           //DOM 2浏览器

                           xmlhttp= new XMLHttpRequest();

                  }catch(e){}

          }

    3         创建Ajax的过程

    3.1       构建Ajax应用

    利用XMLHttpRequest(XHR)对象,每次构建Ajax应用必须遵循以下步骤:

    • 创建XMLHttpRequest对象
    • 创建Ajax请求
    • 发送Ajax请求
    • 处理服务器响应

    创建完XMLHttpRequest对象后就可 以开始使用它了。首先介绍open()方法,它创建一个请求,并准备向服务器发送,open方法语法如下:

    open(method , url , asynchronous , user , password);

    其中的参数含义如下:

    • method:指定请求的类型,一般为get或post;
    • url:指定请求的地址,可以使用绝对地址或相对地址,可以附带查询字符串
    • asynchronous:可选参数,标识请求是同步还是异步,异步请求为true,同步请求为false,默认情况下该参数为true;
    • user:可选参数,指定请求的用户名,没有则省略;
    • password:可选参数, 指定请求的密码,没有则省略;

    示例:创建一个请求,利用get方式发送,服务器url为“my.do”

    xmlhttp.open(“get”, “my.do”);

    3.2       发送Ajax请求

    在创建一个请求以后,可以使用send()方法向服务器发送这个请求,同时发送数据。其原型如下:

    send(body);

    该方法仅有一个body参数,它标识要向服务器发送的数据,其格式为查询字符串的形式。

    示例:

    var body = “userName=qiyi&sex=male&age=25”;

    xmlhttp.send(body);

    3.3       捕获请求的状态变化

    在发送请求后,往往无法知道请求什么时候完成,所以必须利用事件机制捕获请求的状态,XMLHttpRequest对象提供了onreadystatechange事件实现这一功能。 onreadystatechange事件可以指定一个事件处理函数来处理XMLHttpRequest对象的执行结果。 在调用open方法与send方法时都会触发onreadystatechange事件。

    示例:

    xmlhttp.onreadystatechange=function(){  

    //事件处理代码

    }

    3.4       readyState状态值

    onreadystatechange事件是在readyState属性方法改变时触发,readyState的值表示了当前请求的状态,在事件处理程序中可以根据这个值进行不同的处理,下表介绍了每个值的含义。

    readyState

    含义

    0

    表示对象已经建立,但还未初始化。

    1

    当调用open()方法后,readyState=1,表示XMLHttpRequest对象已经被初始化

    2

    当调用send()方法后,XHR在向服务器发送请求的这段时间内,readyState =2

    3

    当调用send()方法后,服务器成功接收到所有请求后,readyState = 3

    4

    表示已经成功接收到来自服务器的响应数据。

    使用readyState属性判断请求状态

    在整个请求过程中,onreadystatechange事件在每一次readyState值发生改变时都会被触发。通常在事件中判断readyState的值是在请求完成时才做处理。

    xmlhttp.onreadystatechange=function(){

             if(xmlhttp.readState ==4){

             //对服务器响应数据进行处理

             }

    }

    3.5       使用status属性判断请求的结果

    status存储服务器端返回的HTTP响应代码,它代表请求的处理结果,下表列出了常见的响应代码的含义:

    Http状态码

    含义

    200

    请求成功

    202

    请求被接收,但处理未完成

    400

    错误的请求

    404

    请求资源未找到

    500

    内部服务器错误

    在请求已经完成的情况下,可以使用status判断请求的结果,其中,404错误是最常见的错误代码,代表“请求资源未找到”。在Ajax的开发中,最常用的是200这个响应代码,例如在浏览器成功打开了一个网页,这时HTTP相应代码就是200,但这个代码一般不会显示。

    xmlhttp.onreadystatechange=function(){

             if(xmlhttp.readState ==4){

                       if(xmlhttp.status ==200){

                                //请求成功完成

                       }

                       else{

                                //网络失败或者服务器错误

                       }

             }

    }

    XHR对象可以接收服务器返回的文本片段和XML文档,分别保存在responseText与responseXML属性中。

    3.6       获得返回文本

    1)        使用responseText获得返回的文本

    当服务器端处理了请求并返回后,可以利用XMLHttpRequest对象的responseText属性获取返回的文本片段。

    //定义XMLHttpRequest对象的事件处理程序

    xmlhttp.onreadystatechange=function(){      

             if(xmlhttp.readyState==4){

                       if(xmlhttp.status==200){

                                //捕捉文本                                                              alert(xmlhttp.responseText);

                       }else{

                                alert(xmlhttp.status);

                       }

             }

    }

    2)        使用responseXML捕捉XML文档

    除responseText属性外,还可以用responseXML属性来获取服务器返回的XML文档。在使用responseText属性获取返回的纯文本时,服务器端无需特殊的操作。

    如果服务器返回的是XML文档,必须要求响应体的HTTP头信息中“content-type”属性为“text/xml”。

    假如服务器返回以下XML文档

    <?xml version="1.0" encoding="UTF-8">

    <root>

    <title>这是服务器返回的XML数据</title>

    </root>

    //将服务器返回的XML打印在屏幕上。

    xmlhttp.onreadystatechange=function(){

         if(xmlhttp.readyState==4){

             if(xmlhttp.status==200){

             //获取xml对象

             var xmlObj=xmlhttp.responseXML;

             //获取第一个title标记内容

             var title=xmlObj.getElementsByTagName("title")[0].text;

             //输出信息

             alert("XML: " + xmlObj.xml + " " + "第一个title标记内容为:" + title);

              }else{

             alert(xmlhttp.status);

              }

          }

    }

  • 相关阅读:
    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
    整合SPRING CLOUD云服务架构
    java虚拟机
    test面板1
    gulp的使用
    拖拽js
    dependencies与devDependencies的区别
    获取随机颜色js
    nodejs创建ejs工程
    css图片垂直居中
  • 原文地址:https://www.cnblogs.com/zhouyeqin/p/7451358.html
Copyright © 2011-2022 走看看