zoukankan      html  css  js  c++  java
  • Ajax

    一、创建对象

    var xmlhttp;

    if (window.XMLHttpRequest)

    {

        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

        xmlhttp=new XMLHttpRequest();

    }

    else

    {

        // IE6, IE5 浏览器执行代码

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

    }

    二、向服务器发送请求

    如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:

    xmlhttp.open("GET","ajax_info.txt",true);

    xmlhttp.send();

    方法 描述

    1、open(method,url,async)

    规定请求的类型、URL 以及是否异步处理请求。

    method:请求的类型;GET 或 POST

    url:文件在服务器上的位置

    async:true(异步)或 false(同步)

    2、send(string)

    将请求发送到服务器。

    string:仅用于 POST 请求

    Async=true时

    xmlhttp.onreadystatechange=function()

    {

        if (xmlhttp.readyState==4 && xmlhttp.status==200)

        {

            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

        }

    }

    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);

    xmlhttp.send();

    三、

    服务器响应

    如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

    属性 描述

    responseText 获得字符串形式的响应数据。

    responseXML 获得 XML 形式的响应数据。

    四、

    onreadystatechange 事件

    当请求被发送到服务器时,我们需要执行一些基于响应的任务。

    每当 readyState 改变时,就会触发 onreadystatechange 事件。

    readyState 属性存有 XMLHttpRequest 的状态信息。

    下面是 XMLHttpRequest 对象的三个重要的属性:

    属性 描述

    onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

    readyState

    存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

    0: 请求未初始化

    1: 服务器连接已建立

    2: 请求已接收

    3: 请求处理中

    4: 请求已完成,且响应已就绪

    status 200: "OK"

    404: 未找到页面

    onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

    readyState 等于 4 且状态为 200 时,表示响应已就绪:

    xmlhttp.onreadystatechange=function()

    {

        if (xmlhttp.readyState==4 && xmlhttp.status==200)

        {

            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

        }

    }

    使用回调函数

    回调函数是一种以参数形式传递给另一个函数的函数。

    如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

    该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

    function myFunction()

    {

        loadXMLDoc("/try/ajax/ajax_info.txt",function()

        {

            if (xmlhttp.readyState==4 && xmlhttp.status==200)

            {

                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

            }

        });

    }

    五、实例

    1、

    实例解析 - showHint() 函数

    当用户在上面的输入框中键入字符时,会执行函数 "showHint()" 。该函数由 "onkeyup" 事件触发:

    function showHint(str)

    {

      var xmlhttp;

      if (str.length==0)

      {

        document.getElementById("txtHint").innerHTML="";

        return;

      }

      if (window.XMLHttpRequest)

      {

        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

        xmlhttp=new XMLHttpRequest();

      }

      else

      {

        // IE6, IE5 浏览器执行代码

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

      }

      xmlhttp.onreadystatechange=function()

      {

        if (xmlhttp.readyState==4 && xmlhttp.status==200)

        {

          document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

        }

      }

      xmlhttp.open("GET","/try/ajax/gethint.php?q="+str,true);

      xmlhttp.send();

    }

    源代码解析:

    如果输入框为空 (str.length==0),则该函数清空 txtHint 占位符的内容,并退出函数。

    如果输入框不为空,showHint() 函数执行以下任务:

    创建 XMLHttpRequest 对象

    当服务器响应就绪时执行函数

    把请求发送到服务器上的文件

    请注意我们向 URL 添加了一个参数 q (带有输入框的内容)

    AJAX 服务器页面 - ASP 和 PHP

    由上面的 JavaScript 调用的服务器页面是 ASP 文件,名为 "gethint.asp"。

    下面,我们创建了两个版本的服务器文件,一个用 ASP 编写,另一个用 PHP 编写。

    ASP 文件

    "gethint.asp" 中的源代码会检查一个名字数组,然后向浏览器返回相应的名字:

    <%

    response.expires=-1

    dim a(30)

    'Fill up array with names

    a(1)="Anna"

    a(2)="Brittany"

    a(3)="Cinderella"

    a(4)="Diana"

    a(5)="Eva"

    a(6)="Fiona"

    a(7)="Gunda"

    a(8)="Hege"

    a(9)="Inga"

    a(10)="Johanna"

    a(11)="Kitty"

    a(12)="Linda"

    a(13)="Nina"

    a(14)="Ophelia"

    a(15)="Petunia"

    a(16)="Amanda"

    a(17)="Raquel"

    a(18)="Cindy"

    a(19)="Doris"

    a(20)="Eve"

    a(21)="Evita"

    a(22)="Sunniva"

    a(23)="Tove"

    a(24)="Unni"

    a(25)="Violet"

    a(26)="Liza"

    a(27)="Elizabeth"

    a(28)="Ellen"

    a(29)="Wenche"

    a(30)="Vicky"

    'get the q parameter from URL

    q=ucase(request.querystring("q"))

    'lookup all hints from array if length of q>0

    if len(q)>0 then

      hint=""

      for i=1 to 30

        if q=ucase(mid(a(i),1,len(q))) then

          if hint="" then

            hint=a(i)

          else

            hint=hint & " , " & a(i)

          end if

        end if

      next

    end if

    'Output "no suggestion" if no hint were found

    'or output the correct values

    if hint="" then

      response.write("no suggestion")

    else

      response.write(hint)

    end if

    %>

    PHP 文件

    下面的代码用 PHP 编写,与上面的 ASP 代码作用是一样的。

    <?php

    // Fill up array with names

    $a[]="Anna";

    $a[]="Brittany";

    $a[]="Cinderella";

    $a[]="Diana";

    $a[]="Eva";

    $a[]="Fiona";

    $a[]="Gunda";

    $a[]="Hege";

    $a[]="Inga";

    $a[]="Johanna";

    $a[]="Kitty";

    $a[]="Linda";

    $a[]="Nina";

    $a[]="Ophelia";

    $a[]="Petunia";

    $a[]="Amanda";

    $a[]="Raquel";

    $a[]="Cindy";

    $a[]="Doris";

    $a[]="Eve";

    $a[]="Evita";

    $a[]="Sunniva";

    $a[]="Tove";

    $a[]="Unni";

    $a[]="Violet";

    $a[]="Liza";

    $a[]="Elizabeth";

    $a[]="Ellen";

    $a[]="Wenche";

    $a[]="Vicky";

    //get the q parameter from URL

    $q=$_GET["q"];

    //lookup all hints from array if length of q>0

    if (strlen($q) > 0)

    {

      $hint="";

      for($i=0; $i<count($a); $i++)

      {

        if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))

        {

          if ($hint=="")

          {

            $hint=$a[$i];

          }

          else

          {

            $hint=$hint." , ".$a[$i];

          }

        }

      }

    }

    // Set output to "no suggestion" if no hint were found

    // or to the correct values

    if ($hint == "")

    {

      $response="no suggestion";

    }

    else

    {

      $response=$hint;

    }

    //output the response

    echo $response;

    ?>

    2、数据库

    实例解释 - showCustomer() 函数

    当用户在上面的下拉列表中选择某个客户时,会执行名为 "showCustomer()" 的函数。该函数由 "onchange" 事件触发:

    function showCustomer(str)

    {

      var xmlhttp;    

      if (str=="")

      {

        document.getElementById("txtHint").innerHTML="";

        return;

      }

      if (window.XMLHttpRequest)

      {

        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

        xmlhttp=new XMLHttpRequest();

      }

      else

      {

        // IE6, IE5 浏览器执行代码

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

      }

      xmlhttp.onreadystatechange=function()

      {

        if (xmlhttp.readyState==4 && xmlhttp.status==200)

        {

          document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

        }

      }

      xmlhttp.open("GET","/try/ajax/getcustomer.php?q="+str,true);

      xmlhttp.send();

    }

    showCustomer() 函数执行以下任务:

    检查是否已选择某个客户

    创建 XMLHttpRequest 对象

    当服务器响应就绪时执行所创建的函数

    把请求发送到服务器上的文件

    请注意我们向 URL 添加了一个参数 q (带有输入域中的内容)

    AJAX 服务器页面

    由上面的 JavaScript 调用的服务器页面是 PHP 文件,名为 "getcustomer.php"。

    PHP 编写服务器文件也很容易,或者用其他服务器语言。请看用 PHP 编写的相应的例子。

    "getcustomer.php" 中的源代码负责对数据库进行查询,然后用 HTML 表格返回结果:

    <%

    response.expires=-1

    sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="

    sql=sql & "'" & request.querystring("q") & "'"

    set conn=Server.CreateObject("ADODB.Connection")

    conn.Provider="Microsoft.Jet.OLEDB.4.0"

    conn.Open(Server.Mappath("/db/northwind.mdb"))

    set rs=Server.CreateObject("ADODB.recordset")

    rs.Open sql,conn

    response.write("<table>")

    do until rs.EOF

      for each x in rs.Fields

        response.write("<tr><td><b>" & x.name & "</b></td>")

        response.write("<td>" & x.value & "</td></tr>")

      next

      rs.MoveNext

    loop

    response.write("</table>")

    %>

    3、

    实例解析 - loadXMLDoc() 函数

    当用户点击上面的"获取我收藏的 CD"这个按钮,就会执行 loadXMLDoc() 函数。

    loadXMLDoc() 函数创建 XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。

    当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用 XML 数据的 填充 id="demo" 的表格元素:

    异步加载 XML 文档

    function loadXMLDoc() {

      var xhttp = new XMLHttpRequest();

      xhttp.onreadystatechange = function() {

        if (this.readyState == 4 && this.status == 200) {

        myFunction(this);

        }

      };

      xhttp.open("GET", "cd_catalog.xml", true);

      xhttp.send();

    }

    function myFunction(xml) {

      var i;

      var xmlDoc = xml.responseXML;

      var table="<tr><th>Artist</th><th>Title</th></tr>";

      var x = xmlDoc.getElementsByTagName("CD");

      for (i = 0; i <x.length; i++) {

        table += "<tr><td>" +

        x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +

        "</td><td>" +

        x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +

        "</td></tr>";

      }

      document.getElementById("demo").innerHTML = table;

    }

    AJAX 服务器页面

    上面这个例子中使用的服务器页面实际上是一个名为 "cd_catalog.xml" XML 文件。

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00086.html
Copyright © 2011-2022 走看看