[交互]AJAX

[交互]AJAX

AJAX 是技术,不是工具,区别于 axios、fetch、$.ajax 等(封装工具)现有交互工具,是用于改变部分网页的技术

HTTP 超文本传输协议,所以 AJAX 也不是 HTTP , AJAX 是实现 HTTP 的一种技术

数据交互的根本是现代浏览器都支持 XMLHttpRequest 对象!!!!

AJAX:Asynchronous JavaScript and XML

创建 XMLHttpRequest

js 复制代码
let xmlhttp = null;
if (window.XMLHttpRequest) {
  //  IE7+, Firefox, Chrome等现代浏览器执行代码
  xmlhttp = new XMLHttpRequest();
} else {
  // IE6, IE5 浏览器执行代码
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

发送请求

js 复制代码
xmlhttp.open(method, url, async);
xmlhttp.setRequestHeader(header, headerValue); //设置请求头
xmlhttp.send(postStr); //发送请求到服务器
  • method: 方法类型
  • url: 服务器请求文件地址
  • async: 同步 false 或异步 true
  • postStr: post 方法提交的数据

服务器响应

XMLHttpRequest readyState 状态值

xmlhttp.readyState 的值

取值 说明
0 请求未初始化(未调用 open))
1 请求已经建立,但是未发送( 未调用 send())
2 请求已发送,正在处理中(通常现在可以从响应中获取内容头)
3 请求处理中;响应中部分数据可用,但服务器还未完成响应的生成
4 响应已完成;可以获取并使用服务器的响应了

xmlhttp.readyState 的值每次发生改变都会调用 xmlhttp.onreadystatechange

响应数据

js 复制代码
xmlhttp.responseTxt; //响应为字符串
xmlhttp.responseXML; //响应为XML对象

请求状态变更回调函数

js 复制代码
xmlhttp.onreadystatechange = function () {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  }
};

XMLHttpRequest status 的值

xmlhttp.status 的值及解释:

取值 说明
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 版本
总结 对以上的状态的归总说明
1xx 信息响应类,表示接收到请求并且继续处理
2xx 处理成功响应类,表示动作被成功接收、理解和接受
3xx 重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx 客户端错误,客户请求包含语法错误或者是不能正确执行
5xx 服务端错误,服务器不能正确执行一个正确的请求

xmlhttp.readyState4 && xmlhttp.status200 的解释:请求完成并且成功返回

常用状态码设置

ts 复制代码
const HTTP_STATUS_CODES = {
  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 Choice",
  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 Satisfiable",
  417: "Expectation Failed",
  422: "Unprocessable Entity",
  500: "Internal Server Error",
  501: "Not Implemented",
  502: "Bad Gateway",
  503: "Service Unavailable",
  504: "Gateway Timeout",
  505: "HTTP Version Not Supported"
};
相关推荐
golitter.4 分钟前
Ajax和axios简单用法
前端·ajax·okhttp
学习使我快乐0115 小时前
AJAX 2——Bootstrap弹框使用、图书管理案例、图片上传方法
ajax·okhttp·bootstrap
Zheng1131 天前
【可视化大屏】将柱状图引入到html页面中
javascript·ajax·html
前端李易安1 天前
ajax的原理,使用场景以及如何实现
前端·ajax·okhttp
萧鼎2 天前
Python常见问题解答:从基础到进阶
开发语言·python·ajax
儒雅的烤地瓜2 天前
JS | 如何解决ajax无法后退的问题?
前端·javascript·ajax·pushstate·popstate事件·replacestate
学习使我快乐012 天前
AJAX 1——axios体验、认识URL、常用请求方法、HTTP协议、错误处理、form-serialize插件
前端·http·ajax·okhttp·axios
冬至喵喵4 天前
SPARK调优:AQE特性(含脑图总结)
大数据·ajax·spark
懒洋洋大魔王5 天前
7.Javaweb-Ajax
前端·ajax·okhttp
人生の三重奏5 天前
前端——Ajax和jQuery
前端·ajax·jquery