zoukankan      html  css  js  c++  java
  • AJAX基本操作

    XMLHttpRequest对象:

    XMLHttpRequest 是 AJAX 的基础。所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

    XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    创建 XMLHttpRequest 对象

    var xmlhttp; 
    if (window.XMLHttpRequest) { 
    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else { 
    // IE6, IE5 浏览器执行代码 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    }

    AJAX - 向服务器发送请求请求

     
    方法 描述
    open(method,url,async)

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

    • method:请求的类型;GET 或 POST
    • url:文件在服务器上的位置
    • async:true(异步)或 false(同步)
    send(string)

    将请求发送到服务器。

    • string:仅用于 POST 请求

    xmlhttp.open("GET","/try/ajax/demo_get.php",true);GET 请求:

    xmlhttp.send();

    在上面的例子中,您可能得到的是缓存的结果。

    为了避免这种情况,请向 URL 添加一个唯一的 ID:

    xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true); xmlhttp.send();

    如果您希望通过 GET 方法发送信息,请向 URL 添加信息:

    xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true); xmlhttp.send();

    POST 请求:

    xmlhttp.open("POST","/try/ajax/demo_post.php",true);

    xmlhttp.send();

    如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

    xmlhttp.open("POST","/try/ajax/demo_post2.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    xmlhttp.send("fname=Henry&lname=Ford");

    方法

    描述

    setRequestHeader(header,value)

    向请求添加 HTTP 头。

    • header: 规定头的名称
    • value: 规定头的值

    url - 服务器上的文件:

    open() 方法的 url 参数是服务器上文件的地址:

    xmlhttp.open("GET","ajax_test.html",true);

    该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务)。

    异步 - True False

    AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

    XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:

    xmlhttp.open("GET","ajax_test.html",true);

    对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

    通过 AJAX,JavaScript 无需等待服务器的响应,而是:

    ²  在等待服务器响应时执行其他脚本

    ²  当响应就绪后对响应进行处理

    Async=true

    当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

    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();

    Async = false

    如需使用 async=false,请将 open() 方法中的第三个参数改为 false:

    xmlhttp.open("GET","test1.txt",false);

    我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

    请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。

    注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:

    xmlhttp.open("GET","/try/ajax/ajax_info.txt",false); 
    xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

    AJAX - 服务器 响应

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

    属性

    描述

    responseText

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

    responseXML

    获得 XML 形式的响应数据。

    getAllResponseHeaders

    获取响应头部

    responseText 属性

    如果来自服务器的响应并非 XML,请使用 responseText 属性。

    responseText 属性返回字符串形式的响应,因此您可以这样使用:

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

    responseXML 属性

    如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:

    xmlDoc=xmlhttp.responseXML; 
    txt=""; 
    x=xmlDoc.getElementsByTagName("ARTIST"); 
    for (i=0;i<x.length;i++) { 
    txt=txt + x[i].childNodes[0].nodeValue + "<br>"; 
    } 
    document.getElementById("myDiv").innerHTML=txt;

    AJAX - 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; 
    } 
    }); 
    }
    
    <!DOCTYPE html>
    <html>
    <head>
    <script>
    var xmlhttp;
    function loadXMLDoc(url,cfunc)
    {
    if (window.XMLHttpRequest)
      {// IE7+, Firefox, Chrome, Opera, Safari 代码
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// IE6, IE5 代码
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=cfunc;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
    }
    function myFunction()
    {
        loadXMLDoc("/try/ajax/ajax_info.txt",function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }
        });
    }
    </script>
    </head>
    <body>
    
    <div id="myDiv"><h2>使用 AJAX 修改文本内容</h2></div>
    <button type="button" onclick="myFunction()">修改内容</button>
    
    </body>
    </html>

     

     

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/yehaifeng/p/7803362.html
Copyright © 2011-2022 走看看