LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

JS XMLHttpRequest入门教程

freeflydom
2023年5月11日 11:8 本文热度 673

在 Javascript 中,XMLHttpRequest 是客户端的一个 API,它为浏览器与服务器通信提供了一个便捷通道。现代浏览器都支持 XMLHttpRequest API,如 IE 7+、Firefox、Chrome、Safari 和 Opera。

创建 XMLHttpRequest 对象

XMLHttpRequest 用于在后台与服务器交换数据。创建 XMLHttpRequest 对象的方法如下:

var xhr = new XMLHttpRequest ();


IE 5.0 版本开始以 ActiveX 组件形式支持 XMLHttpRequest,IE 7.0 版本开始标准化 XMLHttpRequest。不过所有浏览器实现的 XMLHttpRequest 对象都提供相同的接口和用法。

示例

下面示例使用工厂模式把定义 XMLHttpRequest 对象进行封装,这样只需要调用 creatXHR() 方法就可以返回一个 XMLHttpRequest 对象。

//创建XMLHttpRequest 对象

//参数:无

//返回值:XMLHttpRequest 对象

function createXHR () {

    var XHR = [  //兼容不同浏览器和版本得创建函数数组

        function () { return new XMLHttpRequest () },

        function () { return new ActiveXObject ("Msxml2.XMLHTTP") },

        function () { return new ActiveXObject ("Msxml3.XMLHTTP") },

        function () { return new ActiveXObject ("Microsoft.XMLHTTP") }

    ];

    var xhr = null;

    //尝试调用函数,如果成功则返回XMLHttpRequest对象,否则继续尝试

    for (var i = 0; i < XHR.length; i ++) {

        try {

            xhr = XHR[i]();

        } catch(e) {

            continue  //如果发生异常,则继续下一个函数调用

        }

        break;  //如果成功,则中止循环

    }

    return xhr;  //返回对象实例

}

在上面代码中,首先定义一个数组,收集各种创建 XMLHttpRequest 对象的函数。第 1 个函数是标准用法,其他函数主要针对 IE 浏览器的不同版本尝试创建 ActiveX 对象。然后设置变量 xhr 为 null,表示为空对象。接着遍历工厂内所有函数并尝试执行它们,为了避免发生异常,把所有调用函数放在 try 中执行,如果发生错误,则在 catch 中捕获异常并执行 continue 命令,返回继续执行,避免抛出异常。如果创建成功,则中止循环,返回 XMLHttpRequest 对象。

建立连接

在 Javascript 中,使用 XMLHttpRequest 对象的 open() 方法可以建立一个 HTTP 请求。用法如下:

xhr.open(method, url, async, username, password);

其中 xhr 表示 XMLHttpRequest 对象,open() 方法包含 5 个参数,说明如下:
  • method:HTTP 请求方法,必须参数,值包括 POST、GET 和 HEAD,大小写不敏感。

  • url:请求的 URL 字符串,必须参数,大部分浏览器仅支持同源请求。

  • async:指定请求是否为异步方式,默认为 true。如果为 false,当状态改变时会立即调用 onreadystatechange 属性指定的回调函数。

  • username:可选参数,如果服务器需要验证,该参数指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

  • password:可选参数,验证信息中的密码部分,如果用户名为空,则该值将被忽略。


建立连接后,可以使用 send() 方法发送请求。用法如下:

xhr.send(body);

参数 body 表示将通过该请求发送的数据,如果不传递信息,可以设置为 null 或者省略。

发送请求后,可以使用 XMLHttpRequest 对象的 responseBody、responseStream、responseText 或 responseXML 属等待接收响应数据。

示例

下面示例简单演示了如何实现异步通信的方法。

var xhr = creatXHR();  //实例化XMLHttpRequest 对象
xhr.open ("GET", "server.txt", false");  //建立连接xhr.send(null);  //发送请求
console.log(xhr.responseText);  //接收数据
在服务器端(server.txt)中输入下面的字符串。
Hello World  //服务器端脚本
在浏览器控制台会显示“Hello World”的提示信息。该字符串是从服务器端响应的字符串。

发送 GET 请求

在 Javascript 中,发送 GET 请求简单、方便,适用于简单字符串,不适用于大容量或加密数据。实现方法:将包含查询字符串的 URL 传入 open() 方法,设置第 1 个参数值为 GET 即可。服务器能够通过查询字符串接收用户信息。

示例

下面示例以 GET 方式向服务器传递一条信息 callback=functionName。

<input name="submit" type="button" id="submit" value="向服务器发出请求" />

<script>

    window.onload = function () {  //页面初始化

        var b = document.getElementsByTagName("input")[0];

        b.onclick = function () {

            var url = "server.php?callback=functionName";  //设置查询字符串

            var xhr = createXHR();  //实例化XMLHttpRequest 对象

            xhr.open("GET", url, false);  //建立连接,要求同步响应

            xhr.send(null);  //发送请求

            console.log(xhr.responseText);  //接收数据

        }

    }

</script>

在服务器端文件(server.php)中输入下面的代码,获取查询字符串中 callback 的参数值,并把该值响应给客户端。
<?php
    echo $_GET["callback"];
?>
在浏览器中预览页面,当单击提交按钮时,在控制台显示传递的参数值。

查询字符串通过问号?作为前缀附加在 URL 的末尾,发送数据是以连字符&连接的一个或多个名值对。

发送 POST 请求

在 Javascript 中,POST 请求允许发送任意类型、长度的数据,多用于表单提交,以 send() 方法进行传递,而不以查询字符串的方式进行传递。POST 字符串与 GET 字符串的格式相同。格式如下:

send("name1=value1&name2=value2...");

示例

使用 POST 方法向服务器传递数据。

window.onload = function () {  //页面初始化

    var b = document.getElementsByTagName("input")[0];

    b.onclick = function () {

        var url = "server.php";  //设置请求的地址

        var xhr = createXHR();  //实例化XMLHttpRequest 对象

        xhr.open("POST", url, false);  //建立连接,要求同步响应

        xhr.setRequestHeader ('Content-type', 'application/x-www-form-urlencoded');  //设置为表单方式提交

        xhr.send("callback=functionName");  //发送请求

        console.log(xhr.responseText);  //接收数据

    }

}

在 open() 方法中,设置第一个参数为 POST,然后使用 setRequestHeader() 方法设置请求消息的内容类型为“application/x-www-form-urlencoded”,它表示传递的是表单值,一般使用 POST 发送请求时都必须设置该选项,否则服务器无法识别传递过来的数据。

在服务器端设计接收 POST 方式传递的数据,并进行响应。
<?php
    echo $_POST["callback"];
?>

异步响应状态

在 Javascript 中,使用 readyState 属性可以实时跟踪异步响应状态。当该属性值发生变化时,会触发 readystatechange 事件,调用绑定的回调函数。readyState 属性值说明如表所示。

readyState属性值
返回值说明
0未初始化。表示对象已经建立,但是尚未初始化,尚未调用 open() 方法
1初始化。表示对象已经建立,尚未调用 send() 方法
2发送数据。表示 send() 方法已经调用,但是当前的状态及 HTTP 头未知
3数据传送中。已经接收部分数据,因为响应及 HTTP 头不安全,这时通过 responseBody 和 responseText 获取部分数据会出现错误
4完成。数据接收完毕,此时可以通过 responseBody 和 responseText 获取完整的响应数据
如果 readyState 属性值为 4,则说明响应完毕,那么就可以安全的读取响应的数据。

考虑到各种特殊情况,更安全的方法是同时监测 HTTP 状态码,只有当 HTTP 状态码为 200 时,才说明 HTTP 响应顺利完成。

示例

下面示例中,修改请求为异步响应请求,然后通过 status 属性获取当前的 HTTP 状态码。如果 readyState 属性值为 4,且 status(状态码)属性值为 200,则说明 HTTP 请求和响应过程顺利完成,这时可以安全、异步的读取数据。

window.onload = function () {  //页面初始化

    var b = document.getElementsByTagName("input")[0];

    b.onclick = function () {

        var url = "server.php";  //设置请求的地址

        var xhr = createXHR();  //实例化XMLHttpRequest对象

        xhr.open("POST", url, true);  //建立间接,要求异步响应

        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');  //设置为表单方式提交

        xhr.onreadystatechange = function () {  //绑定响应状态事件监听函数

            if (xhr.readyState == 4) {  //监听readyState状态

                if (xhr.status == 200 || xhr.status == 0) {  //监听HTTP状态码

                    console.log(xhr.responseText);  //接收数据

                }

            }

        }

        xhr.send("callback=functionName");  //发送请求

    }

}

中止请求

使用 abort() 方法可以中止正在进行的请求。用法如下:

xhr.onreadystatechange = function () {};  //清理事件响应函数
xhr.abort();  //中止请求


在调用 abort() 方法前,应先清除 onreadystatechange 事件处理函数,因为 IE 和 Mozilla 在请求中止后也会激活这个事件处理函数。如果给 onreadystatechange 属性设置为 null,则 IE 会发生异常,所以为它设置一个空函数。

获取和设置头部消息

HTTP 请求和响应都包含一组头部消息,获取和设置头部消息可以使用下面两个方法。
  • getAllResponseHeaders():获取响应的 HTTP头部消息。

  • getResponseHeader("Header-name"):获取指定的 HTTP 头部消息。

示例

下面示例将获取 HTTP 响应的所有头部消息。

var xhr = createXHR();

var url = "server.txt";

xhr.open("GET", url, true);

xhr.onreadystatechange = function () {

    if (xhr.readyState == 4 && xhr.status == 200) {

        console.log(xhr.getAllResponseHeaders());

    }

}

xhr.send(null);

如果要获取指定的某个头部消息,可以使用 getResponseHeader() 方法,参数为获取头部的名称。例如,获取 Content-Type 头部的值,可以这样设计。
console.log(xhr.getResponseHeader("Content-Type"));
除了可以获取这些头部消息外,还可以使用 setResponseHeader() 方法在发送请求中设置各种头部消息。用法如下:
xhr.setResponseHeader("Header-name", "value");
其中 Header-name 表示头部消息的名称,value 表示消息的具体值。例如,使用 POST 方法传递表单数据,可以设置如下头部消息。
xhr.setResponseHeader("Content-Type", "application/x-www-form-urlencoded");


http://c.biancheng.net/view/5995.html



该文章在 2023/5/11 11:08:34 编辑过
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved