zoukankan      html  css  js  c++  java
  • Ajax学习笔记—入门

         AJAX 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。

         通过 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据。

         AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。

         下面是 Ajax 应用程序所用到的基本技术:

    • HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。
    • JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
    • DHTML 或 Dynamic HTML,用于动态更新表单。我们将使用divspan 和其他动态 HTML 元素来标记 HTML。
    • 文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。

         XMLHttpRequest 对象

         要了解的一个对象可能对您来说也是最陌生的,即 XMLHttpRequest。这是一个 JavaScript 对象,创建该对象很简单,如清单 1 所示。


         清单 1. 创建新的 XMLHttpRequest 对象

          

    <script language="javascript" type="text/javascript">
    var xmlHttp = new XMLHttpRequest();
    </script>

    加入一些 JavaScript

    得到 XMLHttpRequest 的句柄后,其他的 JavaScript 代码就非常简单了。事实上,我们将使用 JavaScript 代码完成非常基本的任务:

      • 获取表单数据:JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。
      • 修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。
      • 解析 HTML 和 XML:使用 JavaScript 代码操纵 DOM(请参阅 下一节),处理 HTML 表单服务器返回的 XML 数据的结构。

    对于前两点,需要非常熟悉 getElementById() 方法,如 清单 2 所示。


          清单 2. 用 JavaScript 代码捕获和设置字段值

    // Get the value of the "phone" field and stuff it in a variable called phone
    var phone = document.getElementById("phone").value;
    // Set some values on a form using an array called response
    document.getElementById("order").value = response[0];
    document.getElementById("address").value = response[1];

    以 DOM 结束

         最后还有 DOM,即文档对象模型。可能对有些读者来说 DOM 有点儿令人生畏,HTML 设计者很少使用它,即使 JavaScript 程序员也不大用到它,除非要完成某项高端编程任务。大量使用 DOM 的 复杂的 Java 和 C/C++ 程序,这可能就是 DOM 被认为难以学习的原因。

         幸运的是,在 JavaScript 技术中使用 DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使用 DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM,仍然能深入地探讨 Ajax,这也是我准备采用的方法。以后的文章将再次讨论 DOM,现在只要知道可能需要 DOM 就可以了。当需要在 JavaScript 代码和服务器之间传递 XML 和改变 HTML 表单的时候,我们再深入研究 DOM。没有它也能做一些有趣的工作,因此现在就把 DOM 放到一边吧。


    获取request对象

         不同浏览器不同,具体查看参考链接。

    Ajax 世界中的请求/响应

    发出请求

         您已经有了一个崭新的 XMLHttpRequest 对象,现在让它干点活儿吧。首先需要一个 Web 页面能够调用的 JavaScript 方法(比如当用户输入文本或者从菜单中选择一项时)。接下来就是在所有 Ajax 应用程序中基本都雷同的流程:

    1. 从 Web 表单中获取需要的数据。
    2. 建立要连接的 URL。
    3. 打开到服务器的连接。
    4. 设置服务器在完成后要运行的函数。
    5. 发送请求。

    清单 5 中的示例 Ajax 方法就是按照这个顺序组织的:

    清单 5. 发出 Ajax 请求

    function callServer() {
      // Get the city and state from the web form
      var city = document.getElementById("city").value;
      var state = document.getElementById("state").value;
      // Only go on if there are values for both fields
      if ((city == null) || (city == "")) return;
      if ((state == null) || (state == "")) return;
      // Build the URL to connect to
      var url = "/scripts/getZipCode.php?city=" + escape(city) + "&state=" + escape(state);
      // Open a connection to the server
      xmlHttp.open("GET", url, true);
      // Setup a function for the server to run when it's done
      xmlHttp.onreadystatechange = updatePage;
      // Send the request
      xmlHttp.send(null);
    }

         其中大部分代码意义都很明确。开始的代码使用基本 JavaScript 代码获取几个表单字段的值。然后设置一个 PHP 脚本作为链接的目标。要注意脚本 URL 的指定方式,city 和 state(来自表单)使用简单的 GET 参数附加在 URL 之后。

         然后打开一个连接,这是您第一次看到使用 XMLHttpRequest。其中指定了连接方法(GET)和要连接的 URL。最后一个参数如果设为 true,那么将请求一个异步连接(这就是 Ajax 的由来)。如果使用 false,那么代码发出请求后将等待服务器返回的响应。如果设为 true,当服务器在后台处理请求的时候用户仍然可以使用表单(甚至调用其他 JavaScript 方法)。

         xmlHttp(要记住,这是 XMLHttpRequest 对象实例)的 onreadystatechange 属性可以告诉服务器在运行完成 后(可能要用五分钟或者五个小时)做什么。因为代码没有等待服务器,必须让服务器知道怎么做以便您能作出响应。在这个示例中,如果服务器处理完了请求,一个特殊的名为 updatePage() 的方法将被触发。

         最后,使用值 null 调用 send()。因为已经在请求 URL 中添加了要发送给服务器的数据(city 和 state),所以请求中不需要发送任何数据。这样就发出了请求,服务器按照您的要求工作。

    处理响应

         现在要面对服务器的响应了。现在只要知道两点:

    • 什么也不要做,直到 xmlHttp.readyState 属性的值等于 4。
    • 服务器将把响应填充到 xmlHttp.responseText 属性中。

         其中的第一点,即就绪状态,将在下一篇文章中详细讨论,您将进一步了解 HTTP 请求的阶段,可能比您设想的还多。现在只要检查一个特定的值(4)就可以了(下一期文章中还有更多的值要介绍)。第二点,使用 xmlHttp.responseText 属性获得服务器的响应,这很简单。清单 6 中的示例方法可供服务器根据 清单 5 中发送的数据调用。

    清单 6. 处理服务器响应

    function updatePage() {
      if (xmlHttp.readyState == 4) {
        var response = xmlHttp.responseText;
        document.getElementById("zipCode").value = response;
      }
    }

         这些代码同样既不难也不复杂。它等待服务器调用,如果是就绪状态,则使用服务器返回的值(这里是用户输入的城市和州的 ZIP 编码)设置另一个表单字段的值。于是包含 ZIP 编码的 zipCode 字段突然出现了,而用户没有按任何按钮!这就是前面所说的桌面应用程序的感觉。快速响应、动态感受等等,这些都只因为有了小小的一段 Ajax 代码。

        细心的读者可能注意到 zipCode 是一个普通的文本字段。一旦服务器返回 ZIP 编码,updatePage() 方法就用城市/州的 ZIP 编码设置那个字段的值,用户就可以改写该值。这样做有两个原因:保持例子简单,说明有时候可能希望 用户能够修改服务器返回的数据。要记住这两点,它们对于好的用户界面设计来说很重要。

    连接 Web 表单

    启动一个 Ajax 过程

    <form>
     <p>City: <input type="text" name="city" id="city" size="25" 
           onChange="callServer();" /></p>
     <p>State: <input type="text" name="state" id="state" size="25" 
           onChange="callServer();" /></p>
     <p>Zip Code: <input type="text" name="zipCode" id="city" size="5" /></p>
    </form>

    如果感觉这像是一段相当普通的代码,那就对了,正是如此!当用户在 city 或 state 字段中输入新的值时,callServer() 方法就被触发,于是 Ajax 开始运行了。

    参考:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html

     

     

     

     

     

  • 相关阅读:
    Uboot启动流程分析(四)
    git更新提交到仓库
    MSM8953通过ADB进行AT指令操作
    Uboot启动流程分析(五)
    去除字符串中多个空格,保留一个空格
    socket握手SYN和ACK理解
    Redhat6更改yum源 (转)
    form提供的两种数据传输方式 get和post method=”post“和method=”get”
    linux误删除恢复(未验证)
    web前端学习路线
  • 原文地址:https://www.cnblogs.com/zxpgo/p/2570897.html
Copyright © 2011-2022 走看看