XMLHttpRequest 对象的学习

已被阅读 1157 次 | 文章分类:javascript | 2018-05-15 14:16

XMLHttpRequest对象提供了在网页加载后与服务器进行通信的方法,也就是网页加载完成后,不需要刷新网页即可与服务器交换数据,所有现代浏览器都提供了对该对象的支持

一:使用XMLHttpRequest对象可以用来做什么

在不重新加载页面的情况下更新网页,在页面已加载后从服务器请求和接受数据

二:创建 XMLHttpRequest 对象

创建 XMLHttpRequest 对象只需一行代码即可,为了能够兼容支持多有浏览器, 在所有现代浏览器中(包括 IE 7)

                                            
xmlhttp=new XMLHttpRequest()
                                            
                                        

在 Internet Explorer 5 和 6 中

                                            
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
                                            
                                        

三:使用XMLHttpRequest对象请求数据的两种方式

是否异步处理的区别在于:异步可以发送完请求后继续执行后面的代码,同步需要等待请求完成接收到服务器返回的数据再往下执行;所以同步容易造成代码阻塞;第一种:不需要异步处理的方式,通过设置open()方法的第三个参数为false;

                                            
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "note.xml", false);
xmlhttp.send();
var xmlDoc = xmlhttp.responseXML;
var result=xmlDoc.getElementsByTagName("to")[1].childNodes[0].nodeValue
console.log(result);
                                            
                                        

通过xmlhttp.responseXml将返回xmlDOM对象,然后可以通过javascript的方式读取数据

第二种:通过异步处理的方式,通过设置open()方法的第三个参数为true;

                                            
/* 创建 XMLHttpRequest 对象 */
var xmlHttp = null;
function GetXmlHttpObject() {
  if (window.XMLHttpRequest) {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlHttp = new XMLHttpRequest();
  } else {
      // code for IE6, IE5
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  return xmlHttp;
}
// -----------ajax方法-----------//
function getLabelsGet() {
  xmlHttp = GetXmlHttpObject();
  if (xmlHttp == null) {
      alert('您的浏览器不支持AJAX!');
      return;
  }
  var url = document.getElementById("text").value;
  xmlHttp.open("GET", url, false);
  xmlHttp.onreadystatechange = state_change;
  xmlHttp.send(null);
}
function state_change() {
  if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3) {
      // 本地提示:加载中...
  } else if (xmlHttp.readyState == 4) {
      if ((xmlHttp.status >= 200 && xmlHttp.status < 300) || xmlHttp.status == 304) {
          var d = xmlHttp.responseText;
          // 处理返回结果
          document.getElementById("status").innerText = "Request was unsuccessful:" + xmlHttp.status;
          document.getElementById("textarea").innerText = xmlHttp.responseText;
      } else {
          
      }
  }
}
                                            
                                        

onreadystatechange是每次 readyState 属性改变的时候调用的事件句柄函数,虽然使代码复杂了,但是这是在没有得到服务器响应的情况下,防止代码阻塞停止的方法。当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。仅在状态为 4 时,我们才执行代码

四:完整测试代码

                                            
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>  
</head>
<body>
  <input type="text" id="text" value="" />
  <input id="button" type="button" value="Get" onclick="getLabelsGet()" /><br />
  <span id="status"></span><br />
  <textarea id="textarea" rows="20" cols="50"></textarea>
  <script type="text/javascript">
    /* 创建 XMLHttpRequest 对象 */
    var xmlHttp = null;
    function GetXmlHttpObject() {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlHttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlHttp;
    }
    // -----------ajax方法-----------//
    function getLabelsGet() {
        xmlHttp = GetXmlHttpObject();
        if (xmlHttp == null) {
            alert('您的浏览器不支持AJAX!');
            return;
        }
        var url = document.getElementById("text").value;
        xmlHttp.open("GET", url, false);
        xmlHttp.onreadystatechange = state_change;//当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。仅在状态为 4 时,我们才执行代码
        xmlHttp.send(null);
    }
    function state_change() {
        if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3) {
            // 本地提示:加载中...
        } else if (xmlHttp.readyState == 4) {
            if ((xmlHttp.status >= 200 && xmlHttp.status < 300) || xmlHttp.status == 304) {
                var d = xmlHttp.responseText;
                // 处理返回结果
                document.getElementById("status").innerText = "Request was unsuccessful:" + xmlHttp.status;
                document.getElementById("textarea").innerText = xmlHttp.responseText;
            } else {
                
            }
        }
    }
  </script>
</body>
</html>
                                            
                                        

五:效果

/net/upload/image/20180508/6366140558874845864012882.gif

QQ:3410192267 | 技术支持 微信:popstarqqsmall

Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号