• XmlHttpRequest对象的获取及相关操作


    一、获取XMLHttpRequest对象

    方案一:

    function ajaxFunction(){
       var xmlHttp;
       try{ // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest();
        }
        catch (e){
           try{// Internet Explorer
                 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
              }
            catch (e){
              try{
                 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
              catch (e){}
              }
        }
        return xmlHttp;
     }

    方案二:

    function getXMLHttpRequest(){
         var xmlHttpReq=null; 
         if (window.ActiveXObject) {//IE浏览器创建XMLHttpRequest对象
             xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
         }else if(window.XMLHttpRequest){
              xmlHttpReq = new XMLHttpRequest();
         }
         return xmlHttpReq;
    }

    方案三:

    function getXMLHttpRequest() {
        var xmlHttpReq=null;
        if (window.XMLHttpRequest) {//Mozilla 浏览器
            xmlHttpReq = new XMLHttpRequest();
        }else {
            if (window.ActiveXObject) {//IE 浏览器
                try {
                    xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {
                    try {//IE 浏览器
                        xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
                    }
                    catch (e) {
                    }
                }
            }
        }
        return xmlHttpReq;
    }

     方案四

    var xmlDoc=null;
    
    $.get("../xml/no4_city.xml",function(xml){
            xmlDoc=xml;
            ........
    });

     二、相关属性及使用方法

    function PostOrder(xmldoc) 
    { 
        createXMLHTTPRequext(); 
    
        // 方法:open --- 创建一个新的http请求,并指定此请求的方法、URL以及验证信息 
        // 语法:XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword); 
        // 参数 
        //  bstrMethod 
        //   http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。 
        //  bstrUrl 
        //   请求的URL地址,可以为绝对地址也可以为相对地址。 
        //  varAsync[可选] 
        //   布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。 
        //  bstrUser[可选] 
        //   如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。 
        //  bstrPassword[可选] 
        //   验证信息中的密码部分,如果用户名为空,则此值将被忽略。 
        // 备注:调用此方法后,可以调用send方法向服务器发送数据。 
        xmlhttp.Open("get", "http://localhost/example.htm", false); 
    
        // 属性:onreadystatechange --- 指定当readyState属性改变时的事件处理句柄 
        // 语法:XMLHttpRequest.onreadystatechange = funcMyHandler; 
        // 当XMLHTTPRequest对象的readyState属性改变时调用该函数,当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活 
        // 备注:此属性只写,为W3C文档对象模型的扩展. 
        xmlhttp.onreadystatechange= HandleStateChange; 
    
        // 方法:send --- 发送请求到http服务器并接收回应 
        // 语法:XMLHttpRequest.send(varBody); 
        // 参数:varBody (欲通过此请求发送的数据。) 
        // 备注:此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。 
        // 如果发送的数据为BSTR,则回应被编码为utf-8, 必须在适当位置设置一个包含charset的文档类型头。 
        // 如果发送的数据为XML DOM object,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。 
        xmlhttp.Send(xmldoc); 
    
        // 方法:getAllResponseHeaders --- 获取响应的所有http头 
        // 备注:每个http头名称和值用冒号分割,并以
    结束。当send方法完成后才可调用该方法。 
        alert(xmlhttp.getAllResponseHeaders()); 
    
        // 方法:getResponseHeader  --- 从响应信息中获取指定的http头 
        // 备注:当send方法成功后才可调用该方法。
        alert(xmlhttp.getResponseHeader("Content-Type")); // 输出http头中的Content-Type列:当前web服务器的版本及名称。 
    
        // 方法:abort --- 取消当前请求 
        // 语法:XMLHttpRequest.abort(); 
        // 备注:调用此方法后,当前请求返回UNINITIALIZED 状态。 
        xmlhttp.abort(); 
    
        // 方法:setRequestHeader --- 单独指定请求的某个http头 
        // 参数:bstrHeader(字符串,头名称) 
        // 备注:如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。 
        xmlhttp.setRequestHeader(bstrHeader, bstrValue); 
    } 
    function HandleStateChange() 
    { 
        // 属性:readyState --- 返回XMLHTTP请求的当前状态  
        // 备注:变量,此属性只读,状态用长度为4的整型表示.定义如下: 
        // 0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 
        // 1 (初始化) 对象已建立,尚未调用send方法 
        // 2 (发送数据) send方法已调用,但是当前的状态及http头未知 
        // 3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误, 
        // 4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 
        if (xmlhttp.readyState == 4){ 
            document.frmTest.myButton.disabled = false; 
    
            // 属性:responseBody --- 返回某一格式的服务器响应数据 
            // 备注:变量,此属性只读,以unsigned array格式表示直接从服务器返回的未经解码的二进制数据。 
            alert(xmlhttp.responseBody); 
    
            // 属性:responseStream --- 以Ado Stream对象的形式返回响应信息 
            alert(xmlhttp.responseStream); 
    
            // 属性:responseText --- 将响应信息作为字符串返回 
            // XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte-order mark),XMLHTTP可 以解码任何UCS-2 (big or little endian)或者UCS-4数据。
            // 注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。 
            alert(xmlhttp.responseText); 
    
            // 属性:responseXML --- 将响应信息格式化为Xml Document对象并返回 
            alert("Result = " + xmlhttp.responseXML.xml); 
    
            // 属性:status --- 返回当前请求的http状态码  
            // Number:Description 
            //         100:Continue
            //         101:Switching protocols 
            //         200:OK 
            //         201:Created 
            //        202:Accepted 
            //         203:Non-Authoritative Information 
            //         204:No Content 
            //         205:Reset Content 
            //         206:Partial Content 
            //         300:Multiple Choices 
            //         301:Moved Permanently 
            //         302:Found 
            //         303:See Other 
            //         304:Not Modified 
            //         305:Use Proxy 
            //         307:Temporary Redirect 
            //         400:Bad Request 
            //         401:Unauthorized 
            //         402:Payment Required 
            //         403:Forbidden 
            //         404:Not Found 
            //         405:Method Not Allowed 
            //         406:Not Acceptable 
            //         407:Proxy Authentication Required 
            //         408:Request Timeout 
            //         409:Conflict 
            //         410:Gone 
            //         411:Length Required 
            //         412:Precondition Failed 
            //         413:Request Entity Too Large 
            //         414:Request-URI Too Long 
            //         415:Unsupported Media Type 
            //         416:Requested Range Not Suitable 
            //         417:Expectation Failed 
            //         500:Internal Server Error 
            //         501:Not Implemented 
            //         502:Bad Gateway 
            //         503:Service Unavailable 
            //         504:Gateway Timeout 
            //         505:HTTP Version Not Supported 
            // 备注:长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。 
            alert(xmlhttp.status);
    
            // 属性:statusText --- 返回当前请求的响应行状态 
            // 备注:字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。 
            alert(xmlhttp.statusText); 
        } 
    } 
    
    PostOrder('http://localhost/example.htm');
  • 相关阅读:
    C#总结(四)调用C++动态库
    Golang 入门系列(十二)ORM框架gorm
    《关键对话》如何高效沟通,营造无往不利的事业和人生?
    Golang 入门系列(十一)Go语言实现webapi
    Golang 入门系列(十) mysql数据库的使用
    Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件
    Golang 入门系列(八) cron定时任务
    Golang 入门系列(七) Redis的使用
    福利 | 互联网产品经理学习资料免费下载(可下载)
    福利 | 2018各大技术大会资料汇总(可下载)
  • 原文地址:https://www.cnblogs.com/sweetyu/p/4954368.html
Copyright © 2020-2023  润新知