loading

手写原生 ajax

// 第一步:创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();

// 第二步 设置请求方法,地址,同步或者异步
xhr.open(methord, url, async)

// method:请求的类型;GET 或 POST

// url:文件在服务器上的位置

// async:true(异步)或 false(同步) 注意:post请求一定要设置请求头的格式内容

xhr.open('POST','/api', true)
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.open('GET', '/api', false)

// 第三步 发送请求
xhr.send('id=123&name=tom'); // post 请求的参数放在这里
xhr.send(); // get 请求不用

// 第四步 监听状态改变,处理响应

// 异步请求需要监听状态
xhr.onreadyStateChange=funtion() {
  if(xhr.readyState == 4 && xhr.status == 200) {
    // responseText 获得字符串形式的响应数据。
    // responseXML 获得XML 形式的响应数据。
    console.log(xhr.responseText);
  }
}

// 同步请求不用监听
console.log(xhr.responseText);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

关于 readuState readyState 是 XMLHttpRequest 对象的一个属性,用来标识当前 XMLHttpRequest 对象处于什么状态。 readyState 总共有 5 个状态值,分别为 0~4,每个值代表了不同的含义

  • 0:未初始化 -- 尚未调用.open()方法;
  • 1:启动 -- 已经调用.open()方法,但尚未调用.send()方法;
  • 2:发送 -- 已经调用.send()方法,但尚未接收到响应;
  • 3:接收 -- 已经接收到部分响应数据;
  • 4:完成 -- 已经接收到全部响应数据,而且已经可以在客户端使用了;

关于 status 响应码 这里只列一些常见的:

  • 200 表示从客户端发来的请求在服务器端被正常处理了。
  • 204 表示请求处理成功,但没有资源返回。
  • 301 表示永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。
  • 302 表示临时性重定向。
  • 304 表示客户端发送附带条件的请求时(指采用 GET 方法的请求报文中包含 if-matched,if-modified-since,if-none-match,if-range,if-unmodified-since 任一个首部)服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回 304Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)
  • 400 表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
  • 401 表示未授权(Unauthorized),当前请求需要用户验证
  • 403 表示对请求资源的访问被服务器拒绝了
  • 404 表示服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
  • 500 表示服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
  • 503 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
最近更新时间: 2021/08/25 17:25:09
最近更新
01
2023/07/03 00:00:00
02
2023/04/22 00:00:00
03
2023/02/16 00:00:00