原生Ajax

1223 字
6 分钟
原生Ajax

Ajax 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),既是一个对象,也是一种方法模式

AJAX 是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新,传统的不使用 Ajax 的网页如果需要更新内容,必需重载整个网页

用法#

创建 Ajax 对象#

通过 XMLHttpRequest()类创建一个 Ajax 对象(此方法不兼容 IE6 以下浏览器)

var Ajax=new XMLHttpRequest()

在 IE6 以下浏览器通过 ActiveXObject("Microsoft.XMLHTTP")创建一个 Ajax 对象

var Ajax=new ActiveXObject("Microsoft.XMLHTTP")

初始化#

通过 open() 方法,可以设置跟后台交互的一些行为,该方法有三个参数 1、method;2、url;3、boolean

method 请求方式,一个包含具体请求方式的字符串

  • 主要请求方式: ​
    • POST,建议在添加数据时使用
    • GET,建议在查询数据时使用 ​
    • PUT,建议在修改数据时使用 ​
    • DELETE,建议在删除数据时使用

url,要请求数据的具体地址

bool,进行同步或异步传输,true 为异步,false 为同步

Ajax.open("GET", "http://localhost:8000", true)

设置需求

// 如果想用GET的时候直接添加需求,可以在url后面加上?再写具体的需求,多个需求通过&符号连接
var Ajax = new XMLHttpRequest()
Ajax.open("GET","https://www.baidu.com?user=zhangsan&pwd=123456",true)
// 如果是POST请求,需要设置请求头信息,如:
// 表单格式请求头信息的写法
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //url格式
// 或
Ajax.setRequestHeader("Content-Type","application/json")//json格式
//在下一步的send()方法中传入需求
Ajax.send("user=zhangsan&pwd=123456")
// 如果想用GET的时候直接添加需求,可以在url后面加上?再写具体的需求,多个需求通过&符号连接
Ajax.open("GET","https://www.baidu.com?user=zhangsan&pwd=123456",true)
// 如果是POST请求,需要设置请求头信息,如:
// 表单格式请求头信息的写法
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded") //url格式
// 或
Ajax.setRequestHeader("Content-Type","application/json")//json格式
//在下一步的send()方法中传入需求
Ajax.send("user=zhangsan&pwd=123456")

GET 与 POST 区别 与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。 然而,在以下情况中,请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

发送请求#

通过 send()方法正式发送请求

Ajax.send()

注: 如果请求方式是 POST 方式,添加的需求作为参数写入 send()方法中

Ajax.send('a=100&b=200&c=300')

返回请求结果#

每当 readyState 改变时,就会触发 onreadystatechange 事件,因此可以给元素绑定onreadystatechange事件,来接受响应的事件 XMLHttpRequest 对象有三个非常重要的属性:onreadystatechange、readyState、status

原生Ajax2
原生Ajax2

readyState属性:

原生Ajax1
原生Ajax1

通过 status(http 的状态码)属性的值判断请求后的结果从而得到请求信息,一般该值为 200 到 300 直接和等于 304 时代表请求成功,值为 404 代表请求失败

response 属性保留着后台返回到前端的数据

Ajax.onreadystatechange = function () {
if (Ajax.readyState === 4) {
//确定http的状态码
if ((Ajax.status >= 200 && Ajax.status < 300) || Ajax.status === 304) {
console.log(Ajax.response);
}
}
}

XmlHttpRequest 对象的主要方法与属性#

XmlHttpRequest 对象的主要方法#

  • void open(String method,String url,Boolen async)用于创建请求 参数:

    • method: 请求方式(字符串类型),如:POST、GET、DELETE…
    • url: 要请求的地址(字符串类型)
    • async: 是否异步(布尔类型)
  • void send(String body)用于发送请求 参数:

    • body: 要发送的数据(字符串类型)
  • void setRequestHeader(String header,String value) 用于设置请求头 参数:

    • header: 请求头的 key(字符串类型)
    • vlaue: 请求头的 value(字符串类型)
  • String getAllResponseHeaders() 获取所有响应头 返回值:

    • 响应头数据(字符串类型)
  • String getResponseHeader(String header) 获取响应头中指定 header 的值 参数:

    • header: 响应头的 key(字符串类型) 返回值:
    • 响应头中指定的 header 对应的值
  • void abort() 终止请求

XmlHttpRequest 对象的主要属性#

  • Number readyState 状态值(整数) 详细:

    • 0-未初始化,尚未调用 open()方法;
    • 1-启动,调用了 open()方法,未调用 send()方法;
    • 2-发送,已经调用了 send()方法,未接收到响应;
    • 3-接收,已经接收到部分响应数据;
    • 4-完成,已经接收到全部响应数据;
  • Function onreadystatechange 当 readyState 的值改变时自动触发执行其对应的函数(回调函数)

  • String responseText服务器返回的数据(字符串类型)

  • XmlDocument responseXML服务器返回的数据(Xml 对象)

  • Number states 状态码(整数),如:200、404…

  • String statesText状态文本(字符串),如:OK、NotFound…

总结#

  1. 定义 XMLHttpRequest 对象
  2. 初始化 设置请求方法和URL (open() 方法)
  3. 发送请求 (send() 方法)
  4. 注册监听的回调函数
  5. 拿到返回值,对页面进行操作

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

原生Ajax
https://sukksa.github.io/posts/yuan-sheng-ajax/
作者
Sukksa
发布于
2021-11-23
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
Ajax跨域
Ajax同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。 所…
2
Axios
Ajax1. REST API: restful (Representational State Transfer (资源)表现层状态转化) 1. 发送请求进行CRUD 哪个操作由请求方式来决定 2. 同一个请求路径可以进行多个操作 3. 请求方式会用到GET/POST/PUT/DELETE 2. 非RES…
3
Fetch
Ajaxfetch 是一种 HTTP 数据请求的方式,是 XMLHttpRequest 的一种替代方案。fetch 不是 ajax 的进一步封装,而是原生 js。Fetch 函数就是原生 js,没有使用 XMLHttpRequest 对象
4
react-hooks
reactReact 的核心是组件。v16.8 版本之前,组件的标准写法是类(class)。 任何一个组件,可以用类来写,也可以用钩子来写。下面是类的写法。 再来看钩子的写法,也就是函数。 官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。而且,钩子是函数,更符合…
5
关于 cesium 在 micro-app 下无法显示的问题
cesium基座:vite + vue3 子应用:vite + vue3 micro app v1.0.0 rc.29, cesium v1.135 子应用包含一个 cesium map,在基座打开子应用时,cesium 无法显示地图,但是 sence, sky box, model 都能正常显示,唯独地图不显…
随机文章随机推荐
Profile Image of the Author
Sukksa
记录前端学习与日常
公告
博客刚刚上线,内容还在慢慢补齐。欢迎随便逛逛~
分类
标签
最新动态
站点统计
文章
69
分类
16
标签
17
总字数
178,517
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录