zoukankan      html  css  js  c++  java
  • 关于Ajax的那些记录

    今天在复习Ajax,那就顺带把一些关于Ajax的知识点都整合下.

    首先我们先来简要讲述下,什么是Ajax.

    Ajax,为异步JavaScript和XML.Ajax是一种用于创建快速动态网页的技术,通过在后台服务器进行少量数据交换,Ajax可以使得网页实现异步更新.这也意味着,可以在不重新加载整个页面的情况下,对网页的某个部分进行相应的更新.如果,使用同步提交的话,当用户发送请求时,当前页面就不可使用了,服务器响应页面到客户端,响应完成时,用户才可以使用页面.

    那么,要完整实现一个Ajax异步调用与局部刷新,有哪些步骤呢?

    1.创建XMLHttpRequest对象,及创建一个异步调用对象

    2.创建一个新的HTTP请求,并指定该HTTP请求的方法,URL以及验证消息.

    3.设置响应HTTP请求状态变化的函数.

    4.发送HTTP请求.
    5.获取异步调用返回的数据.

    6.使用Javascript与DOM实现局部更新.

    接下来,我们对每一个步骤进行一个解述:

    一、创建XMLHttpRequest对象

    不同浏览器使用的异步调用对象有所不同,在IE浏览器中,异步调用使用的是XMLHTTP组件中的XMLHttpRequest对象,而在Firefox浏览器中,直接使用的是XMLHttpRequest组件,因此,在不同浏览器中创建XMLHttpRequest的方式都有所不同.

    在IE浏览器中,创建方式为:

    var xmlHttpRequest = new ActiveXobject('Microsoft.XMLHTTP');

    在Firefox中,创建方式为:

    var xmlHttpRequest  = new XMLHttpRequest()

    如果我们明确知道是什么浏览器,那么步骤就如上述选择就好啦,但是有时候我们也不能确定,那这种情况下呢,我们就把两种方式都加上去.

    var xmlHttpRequest;//定义一个变量,用于存放xmlHttpRequest对象
    create();
    
    function create(){
    if(window.ActiveObject){//判断是否为IE浏览器
    xmlHttpRequest = new ActiveObject("Microsoft.XMLHTTP");
    //创建IE的XMLHttpRequest对象}else if(window.XMLHttpRequest){
    xmlHttpRequest = new XMLHttpRequest();
    }
    }
     

    二、创建HTTP请求

    创建了XMLHttpRequest对象之后,必须为XMLHttpRequest对象创建HTTP请求,用于说明XMLHttpRequest对象要从哪获取数据,一般是网站中的数据或者为本地中其他文件中的数据.

    创建HTTP请求,可以使用XMLHttpRequest对象的open()方法,其语法如下

    XMLHttpRequest.open(method,URL,flag,name,password);

    挨个来解释下哈:

    1.method:该参数用于指定HTTP请求方法,一共有post、get、head、put、delete五种,常用的话就post与get

    2.URL:该参数用于指定HTTP请求的URL地址,可以是绝对的也可以是相对的.

    3.flag:该参数为可选参数,为布尔值,该参数用于指定是否使用异步方式,默认为true.

    4.name:该属性为可选参数,用于输入用户名,若服务器需要验证,则必须使用该参数.

    5.password:该参数为可选参数,用于输入密码,若服务器需要验证,则必须使用该参数.

    如果访问一个网站文件的内容的话:

    xmHttpRequest.open("get","http://www.cnblogs.com/ljylearnsmore")

    若是访问本地文件的话:

    xmlHttpRequest.open("get","ajax.htm")

    三、设置响应HTTP请求状态变化的函数

    创建完HTTP请求之后,应该就可以将HTTP请求发送给Web服务器了,然而,发送HTTP请求的目的是为了接收服务器返回的数据.从创建XMLHttpRequest对象开始,到发送数据、接收数据、XMLHttpRequest对象一共会经历以下五种状态:

    1.未初始状态.在创建完XMLHttpRequest对象时,该对象处于未初始化状态,此时XMLHttpRequest对象的readyState属性值为0.

    2.初始化状态,在创建完XMLHttpRequest对象后,使用open()方法创建HTTP请求时,该对象处于初始化状态,此时XMLHttpRequest的readyState属性值为1.

    3.发送数据状态.在初始化XMLHttpRequest对象后,使用send()方法发送数据时,该对象处于发送数据状态,readyState的属性值为2.

    4.接收数据状态,web服务器接收完数据并处理完毕后,向客户端传送返回的结果,此时XMLHttpRequest对象处于接收数据状态,readyState的属性值为3.

    5.完成状态,XMLHttpRequest对象接收数据完毕后,进入完成状态.此时XMLHttpRequest对象的readyState属性值为4,此时接收完毕后的数据存入在客户端内存中,可以使用response Text属性或者response Xml属性来获取数据.

    只有在XMLHttpRequest对象完成了以上五个步骤之后,才可以获取从服务器端返回的数据,因此,如果想获得从服务器端返回的数据,就必须要判断XMLHttpRequest对象的状态.XMLHttpRequest对象可以响应readystatechange事件,该事件在XMLHttpRequest对象状态改变时(即readyState属性改变),激发.因此,可以通过该事件调用一个函数,并在该函数中判断XMLHttpRequest对象的readyState属性值.如果,readyState属性值为4,则使用response Text属性或response Xml属性来获取数据.

    //设置当XMLHttpRequest对象状态改变时调用的函数
    XMLHttpRequest.onreadystatechange = getData;
    //定义函数
    function getData(){
    //判断XHR对象的readyState属性值是否为4,如果是的话,那么就表示异步调用完成了
    if(XMLHttpRequest.readyState==4){
    //设置获取数据的语句
    }
    }

    四、设置获取服务器返回数据的语句

    若XMLHttpRequest对象的readyState属性值为4,表示异步调用过程已经完毕,就可以通过XMLHttpRequest对象的response Text属性或responseXml属性来获取数据.但是,异步调用过程完毕后,也不代表异步调用就'

    成功了,如果要判断异步调用是否成功,还要判断XMLHttpRequest对象的status属性值,只有当其等于200的时候,才表示异步调用成功了.因此要获取数据器返回数据的语句,还必须先判断XMLHttpRequest对象的status属性值是否为200.这里,我们还需要考虑,如果在本地运行,则XMLHttpRequest.status为0,因此我们可按如下代码所写:

    XMLHttpRequest.onreadystatechange=getData();
    function getData(){
    if(XMLHttpRequest.readystate==4){
    if(XMLHttpRequest.status==200||XMLHttpRequest.status==0){
    document.write(XMLHttpRequest.responseText);
    //将返回结果以字符串形式输出
    //或者使用responseXml将返回结果以XML形式输出
    }
    }
    }

    五、发送HTTP请求

    在经历以上几个步骤后,就可以将HTTP请求发送到web服务器上去了,发送HTTP请求可以使用XMLHttpRequest对象的send()方法,其语法代码如下所示:

    XMLHttpRequest.send(data);

    如果请求数据不需要参数,那就可以用null来代替.如果要传的话,就按照在URL中传递参数的格式来传递:

    id-myId&school=mySchool

    只有在使用send()方法之后,XMLHttpRequest对象的readyState属性值才会开始改变,才会激发readystatechange事件,并调用函数.

    六、局部更新

    在通过Ajax的异步调用获得服务器端数据之后,可以调用Javascript或者DOM来将网页中的数据进行局部更新.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>THis is Ajax demo</title>
        <script>
           var xmlHttpRequest;
           //定义一个用于创建XMLHttpRequest对象
           function create(){
               if(window.ActiveXObject){
                   xmlHttpRequest =  new ActiveXObject("Microsoft.XMLHTTP");
               }else if(window.xmlHttpRequest){
                   xmlHttpRequest = new xmlHttpRequest();
               }
           }
           //响应HTTP请求状态变化的函数
           function httpStatechange(){
               if (xmlHttpRequest.readyState==4){
                   if (xmlHttpRequest.status==200||xmlHttpRequest.status==0){
                       var node = document.getElementById('myDiv');//查找节点
                       node.firstChild.nodeValue = xmlHttpRequest.responseText;//更新数据
                   }else{//异步调用未成功的时候,弹出警告框,并显示出错信息
                       alert("error:HTTP状态码为:"+xmlHttpRequest.status +"HTTP状态信息为:" + xmlHttpRequest.statusText);
    
                   }
               }
           }
    
           //异步调用服务器端段数据
           function getData(name,value) {
               createXMLHttpRequest();
               if (xmlHttpRequest != null) {
                   xmlHttpRequest.open("get", "ajax.text", true);//创建HTTP请求
                   xmlHttpRequest.onreadystatechange = httpStatechange;//HTTP请求状态变化的函数
                   xmlHttpRequest.send(null);//发送请求
               }
           }
          </script>
    </head>
    <body>
    <div id="myDiv">原数据</div>
    <input type="button" value="更新数据" onclick="getData()">
    </body>

    接下来,我们再来讲述下Ajax中的get与post的区别:

    get一般用于获取数据;如果需要传递参数,那么会默认将参数拼接到url的后面,然后再发送给服务器;其请求传递参数大小是有限制的,浏览器的地址栏也有大小限制.

    其安全性会比较低,一般会走缓存,为了防止走缓存,给url后面每次拼的参数不同;放在?后面,一般用个时间戳.

    而post的话,一般用于发送数据,post传递参数的话,休要把参数放进请求体中,对大小并无要求;且安全性比较高,请求不会走缓存.

    我们再来笼一下,一些ajax的状态码:

    200的话,表示请求成功;

    301表示永久重定向;

    302,表示临时转移;

    304,表示读取缓存,即表示浏览器端有缓存,并且服务器未更新,不再向服务端请求资源

    307,为临时的重定向

    以4开头的话,都是客户端的问题:

    400,表示数据/格式错误;

    401,即权限不够,比如身份不合格,访问网站的时候,登录与不登录是不一样的

    404,即路径错误,找不到文件

    以5开头的,都是服务端的问题:

    500,即服务器的问题

    503,表示超负荷.

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14513398.html
Copyright © 2011-2022 走看看