原生 JavaScript 发起异步 GET 或 POST 请求方法

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容不具普遍性,可能因操作环境差异而与实际有所出入,故请勿照搬照抄,仅供参考。

之前有研究过《非 jQuery 实现 Ajax、Jsonp 方法》,是利用原生 JavaScript 构造了类似 jQuery 的异步请求方法,有时候我们并没有那么复杂的需求,因此可以直接使用原生 JavaScript 发起 GET 或 POST 请求。

步骤

不管是 GET 还是 POST 请求,主要分三步:

  • 第一步:创建需要的对象,这里主要用到的是 XMLHttpRequest,可能注意需要考虑早期的 IE;
  • 第二步:打开连接;
  • 第三步:发送请求;
  • 第三步:接收处理返回的数据;

GET 请求

代码示例:

var xhr= new XMLHttpRequest(),
    method = "GET",
    url = "https://www.vircloud.net/";

xhr.open(method, url, true);
xhr.send();

xhr.onreadystatechange = function () {
  if(xhr.readyState === 4 && xhr.status === 200) {
    var json = xhr.responseText;  //如果获取到 json 字符串,还需解析
    console.log(json);
  }
}

readyState

XMLHttpRequest.readyState 属性返回一个 XMLHttpRequest 代理当前所处的状态。一个 XHR 代理总是处于下列状态中的一个:

状态描述
0UNSENT代理被创建,但尚未调用 open() 方法。
1OPENEDopen() 方法已经被触发,在这个状态中,可以通过 setRequestHeader() 方法来设置请求的头部, 可以调用 send() 方法来发起请求。
2HEADERS_RECEIVEDsend() 方法已经被调用,并且头部和状态已经可获得(已接收)。
3LOADING响应内容正在接收中(不完整),responseText 属性已经包含部分数据。
4DONE下载操作已完成,数据传输已经彻底完成或失败。

在 IE 中,状态与其他浏览器不一样,而是 READYSTATE_UNINITIALIZED (0)READYSTATE_LOADING (1)READYSTATE_LOADED (2)READYSTATE_INTERACTIVE (3)READYSTATE_COMPLETE (4),因此建议直接使用值来表示,如 xhr.readyState === 4

POST请求

var xhr= new XMLHttpRequest(),
    method = "POST",
    url = "https://www.vircloud.net/";

xhr.open(method, url, true);

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //POST 方式必须设置请求头。

xhr.send('name=teswe&ee=ef'); //将数据直接发送

xhr.onreadystatechange = function () {
  if(xhr.readyState === 4 && xhr.status === 200) {
    var json = xhr.responseText;  //如果获取到 json 字符串,还需解析
    console.log(json);
  }
}

POST 请求也支持将数据以 JSON 的方式发送:

xhr.setRequestHeader("Content-type","application/json");
var obj = { name: 'zhansgan', age: 18 };
xhr.send(JSON.stringify(obj));

setRequestHeader

XMLHttpRequest.setRequestHeader() 是设置 HTTP 请求头部的方法。此方法必须在 open() 方法和 send() 之间调用。如果多次对同一个请求头赋值,只会生成一个合并了多个值的请求头。

如果没有设置 Accept 属性,则此发送出 send() 的值为此属性的默认值 */*

安全起见,有些请求头的值只能由 user agent 设置,而不能自定义,具体参见:forbidden header namesforbidden response header names


关于 JavaScript 的 XMLHttpRequest() 方法的详细说明,可以参考《Mozilla MDN 在线文档》。


参考文章:

1、《js发送get 、post请求的方法简介


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 ajax教程javascript方法异步 的文章

 本文最后更新于 2020/10/22 10:36:39,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 建站 > 原生 JavaScript 发起异步 GET 或 POST 请求方法