zoukankan      html  css  js  c++  java
  • ajax

    通过使用 XMLHttpRequest 对象,web 开发者可以做到在页面已加载后从服务器更新页面!
    在 2005 年 AJAX 被 Google 推广开来(Google Suggest)。
    Google 建议使用 XMLHttpRequest 对象来创建一种动态性极强的 web 界面:当您开始在 Google 的搜索框中输入查询时,JavaScript 会向某个服务器发出这些字词,然后服务器会返回一系列的搜索建议。
    XMLHttpRequest 对象得到下列浏览器的支持:Internet Explorer 5.0+、Safari 1.2、Mozilla 1.0 / Firefox、Opera 8+ 以及 Netscape 7。
    AJAX Http 请求
    Previous PageNext Page
    AJAX 使用 Http 请求 在传统的 JavaScript 编程中,假如您希望从服务器上的文件或数据库中得到任何的信息,或者向服务器发送信息的话,就必须利用一个 HTML 表单向服务器 GET 或 POST 数据。而用户则需要单击“提交”按钮来发送/获取信息,等待服务器的响应,然后一张新的页面会加载结果。
    由于每当用户提交输入后服务器都会返回一张新的页面,传统的 web 应用程序变得运行缓慢,且越来越不友好。
    通过利用 AJAX,您的 JavaScript 会通过 JavaScript 的XMLHttpRequest对象,直接与服务器来通信。
    通过使用 HTTP 请求,web 页可向服务器进行请求,并得到来自服务器的响应,而不加载页面。用户可以停留在同一个页面,他或她不会注意到脚本在后台请求过页面,或向服务器发送过数据。
    您的第一个 AJAX 应用程序
    为了让您理解 AJAX 的工作原理,我们将创建一个小型的 AJAX 应用程序。
    首先,我们需要一个带有两个文本框的 HTML 表单:用户名和时间。用户名文本框由用户填写,而时间文本框使用 AJAX 进行填写。
    此 HTML 文件名为 "testAjax.htm"(请注意这个 HTML 表单没有提交按钮!):
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <body>
    <formname="myForm">
    用户:<inputtype="text"name="username"/>
    时间:<inputtype="text"name="time"/>
    </form>
    </body>
    </html>
    我们将在下一节解释 AJAX 的基本原理。
    AJAX 浏览器支持
    Previous PageNext Page
    AJAX - 浏览器支持 AJAX 的要点是 XMLHttpRequest 对象。
    不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。
    IE 浏览器使用ActiveXObject,而其他的浏览器使用名为XMLHttpRequest的 JavaScript 内建对象。
    如需针对不同的浏览器来创建此对象,我们要使用一条 "try and catch" 语句。您可以在我们的 JavaScript 教程中阅读更多有关try 和 catch 语句的内容。
    让我们用这段创建 XMLHttpRequest 对象的 JavaScript 来更新一下我们的 "testAjax.htm" 文件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <html>
    <body>
    <scripttype="text/javascript">
    functionajaxFunction(){
    varxmlHttp;
    try{//Firefox,Opera8.0+,Safari
    xmlHttp=newXMLHttpRequest();
    }catch(e){//InternetExplorer
    try{
    xmlHttp=newActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
    try{
    xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
    alert("您的浏览器不支持AJAX!");
    returnfalse;
    }
    }
    }
    }
    </script>
    <formname="myForm">
    用户:<inputtype="text"name="username"/>
    时间:<inputtype="text"name="time"/>
    </form>
    </body>
    </html>
    例子解释:
    首先声明一个保存 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 的提示。
    注释:上面这些浏览器定制的代码很长,也很复杂。不过,每当您希望创建 XMLHttpRequest 对象时,这些代码就能派上用场,因此您可以在任何需要使用的时间拷贝粘贴这些代码。上面这些代码兼容所有的主流浏览器:Internet Explorer、Opera、Firefox 以及 Safari。
    下一节为您展示如何使用 XMLHttpRequest 对象与服务器进行通信。
    AJAX - XMLHttpRequest 对象
    Previous PageNext Page
    AJAX - 更多有关 XMLHttpRequest 对象的知识
    在向服务器发送数据之前,我们有必要解释一下 XMLHttpRequest 对象的三个重要的属性。
    onreadystatechange 属性
    onreadystatechange 属性存有处理服务器响应的函数。下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行设置:
    1
    2
    3
    xmlHttp.onreadystatechange=function(){
    //我们需要在这里写一些代码
    }
    readyState 属性
    readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。
    这是 readyState 属性可能的值:
    0
    请求未初始化(在调用 open() 之前)
    1
    请求已提出(调用 send() 之前)
    2
    请求已发送(这里通常可以从响应得到内容头部)
    3
    请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
    4
    请求已完成(可以访问服务器响应并使用它)
    我们要向这个 onreadystatechange 函数添加一条 If 语句,来测试我们的响应是否已完成(意味着可获得数据):
    1
    2
    3
    4
    5
    xmlHttp.onreadystatechange=function(){
    if(xmlHttp.readyState==4){
    //从服务器的response获得数据
    }
    }
    responseText 属性
    可以通过 responseText 属性来取回由服务器返回的数据。
    在我们的代码中,我们将把时间文本框的值设置为等于 responseText:
    1
    2
    3
    4
    5
    xmlHttp.onreadystatechange=function(){
    if(xmlHttp.readyState==4){
    document.myForm.time.value=xmlHttp.responseText;
    }
    }
    下一节,我们会介绍如何向服务器请求数据!
    AJAX - 请求服务器
    Previous PageNext Page
    AJAX - 向服务器发送一个请求
    要想把请求发送到服务器,我们就需要使用 open() 方法和 send() 方法。
    open() 方法需要三个参数。第一个参数定义发送请求所使用的方法(GET 还是 POST)。第二个参数规定服务器端脚本的 URL。第三个参数规定应当对请求进行异步地处理。
    send() 方法可将请求送往服务器。如果我们假设 HTML 文件和 ASP 文件位于相同的目录,那么代码是这样的:
    xmlHttp.open("GET","time.asp",true);xmlHttp.send(null);
    我们必须决定何时执行 AJAX 函数。当用户在用户名文本框中键入某些内容时,我们会令函数“在幕后”执行。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <html>
    <body>
    <scripttype="text/javascript">
    functionajaxFunction(){
    varxmlHttp;
    try{//Firefox,Opera8.0+,Safari
    xmlHttp=newXMLHttpRequest();
    }catch(e){//InternetExplorer
    try{
    xmlHttp=newActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
    try{
    xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
    alert("您的浏览器不支持AJAX!");
    returnfalse;
    }
    }
    }
    xmlHttp.onreadystatechange=function(){
    if(xmlHttp.readyState==4){
    document.myForm.time.value=xmlHttp.responseText;
    }
    }
    xmlHttp.open("GET","time.asp",true);
    xmlHttp.send(null);
    }
    </script>
    <formname="myForm">
    用户:<inputtype="text"name="username"onkeyup="ajaxFunction();"/>
    时间:<inputtype="text"name="time"/>
    </form>
    </body>
    </html>
  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/hz0356/p/3814967.html
Copyright © 2011-2022 走看看