参考资料:AJAX 状态值(readyState)与状态码(status)详解

一、AJAX实际运行中的几种状态值

AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是:

0 - (未初始化)还没有调用send()方法

1 - (载入)已调用send()方法,正在发送请求

2 - (载入完成)send()方法执行完成,

3 - (交互)正在解析响应内容

4 - (完成)响应内容解析完成,可以在客户端调用了

对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

二、readyState VS status 区别

1、readyState & status & load

  • readyState:客户端与客户交互状态过程
  • status:服务器对请求的反馈,数据是否正常
  • load: 4(readyState === 4)为一种完成状态(响应内容解析完成状态),触发调用load事件

2、AJAX状态值(readyState)与状态码(status)区别

(1)AJAX状态值,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤。如:正在发送——正在响应等,由AJAX对象与服务器交互时所得;使用“ajax.readyState”获得,由数字1~4单位数字组成。

(2)AJAX状态码,无论AJAX访问是否成功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码,该信息使用“ajax.status”所获得,由数字1XX,2XX三位数字组成。

这就是我们在使用AJAX时为什么采用下面的方式判断所获得的信息是否正确的原因。

if(ajax.readyState == 4 && ajax.status == 200) { putData(ajax.responseText);
}

3、 AJAX运行步骤与状态值说明

(1)AJAX运行步骤:

在AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是:

  • 0 - (未初始化)还没有调用send()方法
  • 1 - (载入)已调用send()方法,正在发送请求
  • 2 - (载入完成)send()方法执行完成,
  • 3 - (交互)正在解析响应内容
  • 4 - (完成)响应内容解析完成,可以在客户端调用了

对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

(2) AJAX状态值说明

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功

201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

400——错误请求,如语法错误

401——请求授权失败

402——保留有效ChargeTo头响应

403——请求不允许

404——没有发现文件、查询或URl

405——用户在Request-Line字段定义的方法不允许

406——根据用户发送的Accept拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的饿时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求

500——服务器产生内部错误

501——服务器不支持请求的函数

502——服务器暂时不可用,有时是为了防止发生系统过载

503——服务器过载或暂停维修

504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

505——服务器不支持或拒绝支请求头中指定的HTTP版本

(3) AJAX运行步骤示义图

3、继续探究一下所请求的后端数据文件

xhr.open()中要求请求服务器,即请求一个资源,而 url 则是定位一个资源

将所请求的服务器定位成请求一些资源,如'/hello.json'。假如模拟后端的数据,比如请求一个登陆数据:'/login',请求时带有一些参数,如将用户所输入的数据拼装成类似url形式:

'/login?username=wangxiaoqin&password=12345'作为资源请求

4、通过post形式去请求数据

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head><body><script>     var xhr = new XMLHttpRequest()xhr.open('POST','/1.json',true)xhr.send('username=wangxiaoqin&password=12345')//直接发送数据xhr.addEventListener('load',function(){console.log(xhr.status)if((xhr.status >= 200 && xhr.status <300) ||xhr.status ===304){var data = xhr.responseTextconsole.log(data)}else{console.log('error')}            })</script></body>
</html>

'username=wangxiaoqin&password=12345' 这段拼接的过程可以通过写一个函数展现:

//传递一个参数:
makeUrl({username:'wangxiaoqin',password:12345
})
//拼接一个url,通过遍历这个对象,进行拼接
function makeUrl(obj){var arr = []for(var key in obj){arr.push(key + '=' + obj[key])}return  arr.join('&')}

那么,xhr.send()便直接可以发送这个对象

xhr.send(makeUrl({username:'wangxiaoqin',password:12345
}))

.netcore 判断是否 ajax 请求_第3部分-异步使用2-2:Ajax 之 状态码相关推荐

  1. java 判断请求为 ajax请求_请问如何判断一个请求是不是ajax请求?

    针对跨域情况的getjson 或者ajax(jsonp)可以使用ACCEPT请求头部格式来判断 PHP端对应$_SERVER['HTTP_ACCEPT'] jsonp的请求一般是:text/javas ...

  2. java判断ajax请求_判断Httprequest 是否ajax 请求的方法

    在写后台程序时,有时候需要知道客户端发送的是普通的请求,还是ajax 请求,至少在我目前所做的项目中有这样一个用途:如果session 过期的时候,如果是普通请求,跳转到登录页面,但如果是ajax 请 ...

  3. ajax put请求_前端基础面试:手写一个ajax,说说XMLHttpRequest 都有哪些属性?

    前言 在 Ajax 出现之前,网页想要和服务器通信,最常用的方式是使用 form 表单:用户提交表单后,浏览器就开始跳转,服务器接收表单并处理,然后将新的网页返回给浏览器:整个过程用户都只有等待,用户 ...

  4. addeventlistener监听ajax请求_基于h5的history改善ajax列表请求体验

    信息比较丰富的网站通常会以分页显示,在点"下一页"时,很多网站都采用了动态请求的方式,避免页面刷新.虽然大家都是ajax,但是从一些小的细节还是 可以区分优劣.一个小的细节是能否支 ...

  5. ajax 请求_前端后分离Ajax跨域请求保证Session一致

    JAVA码牛牛,程序员学习指南 前后端分离的项目,使用Ajax请求一般都出现跨域的问题. 跨域的时候所创建的session是不会被浏览器保存下来的.所以每次进行跨域请求时,服务器都认为不是同一个浏览器 ...

  6. ajax请求_重复的ajax请求让人很受伤

    重复的ajax请求让人很受伤 重复的ajax请求一波又一波的袭来,服务器正躲在角落里瑟瑟发抖,它内心是崩溃的,这算是遭了罪了, 前端小王子为啥没有做好限制和封锁,真是伤不起啊,哎,不如意事常八九,能与 ...

  7. python模拟ajax请求_短信炸弹—用Python模拟ajax请求

    我们经常使用各种脚本发送网络请求,提交各种形式的body数据,所以Content-Type的类型也有很多种. 常见的取值有: application/xml : 在 XML RPC,如 RESTful ...

  8. ajax 请求_你了解前端出现Ajax跨域请求的原因吗?

    ajax的跨域真正面目 作为一名前端开发人员,谈到Ajax几乎是无人不知无人不晓,每天都会跟Ajax打打交道,特别在如今提倡前后端分离的时代,更是相处甚多,使用过程中碰到最多的一个问题相信应该是请求跨 ...

  9. axios创建实例对象发送ajax请求_解决一个网页请求多个服务器场景---axios工作笔记009

    然后我们再去看看,我们利用 axios去创建实例对象来发送ajax请求 可以看到上面我们创建了一个duanzi的axios对象. 然后我们在这个duanzi的axios对象中,指定默认的baseURL ...

最新文章

  1. 敏捷开发 | 张三与需求管理
  2. [转] MySQL和MongoDB设计实例对比
  3. Java 链接MySQL数据库时报的connect和denied错解决方法
  4. 磁盘阵列RAID的分类有哪些?
  5. 如何在多台web服务器上共享session?
  6. spring 上下文_一次性教你彻底理解 Spring容器和应用上下文!
  7. java 中 正则 正则表达式 匹配 url
  8. JAVA解决实例问题_解决java方法
  9. python编写dll_python调用c/c++写的dll
  10. HALCON 21.11:深度学习笔记---设置超参数(5)
  11. python2.7.12源码编译
  12. 鸿蒙2.0手机交互体验,鸿蒙 2.0手机应用开发者Beta,来了!全新交互体验
  13. 关于vs编译器的一些认识
  14. 大使馆大师傅活动分工和非都市规划
  15. 开发步骤_社交app开发步骤,送给不懂app开发的你
  16. 前端优化之二 图片优化——质量与性能的博弈
  17. Processing入门简介
  18. 微信小程序 - 公农历通用时间选择器组件
  19. 计算机类工程硕士研究生实践报告,工程硕士实践的总结报告.docx
  20. 【软件测试】如何测试人工智能软件?

热门文章

  1. 并行程序调试、测试与模型检测
  2. 【转】XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证 ....
  3. LocBaml for .net 4.0
  4. 2018怎么打开2019_2019年养老金涨幅5%,这几个方面有调整,你到手的钱增加没
  5. Python爬虫实战源码合集(持续更新)
  6. npm i 命令长时间卡住的解决办法
  7. Ubuntu18.04之国内常用源
  8. GStreamer入门概念(二)
  9. Linux container_of用法
  10. Android HWUI硬件加速模块浅析