AJAX学习记录

什么是AJAX

在做出一个项目之前,明确这项技术是很有必要的。详细的定义可以去查阅相关文档。我的理解就是:ajax就是浏览器与服务器进行数据通信的技术(是异步的js和xml使用了XMLHttpRequest对象与服务器通信)

关于axios

url

目标资源地址(url:协议://域名/资源路径)
method 提交方法(get默认获取,post提交,put修改全部数据,push修改部分数据)且不区分大小写
params 查询参数设置
data 提交参数设置
then 用来捕获成功
catch 用来捕获错误

axios查询配置

axios({
					url: '目标资源路径',
					method: '请求方法',
					params: {
						参数1:值1,
                        参数2:值2,
                        ......
					}
				}).then(result => {
					
                //处理数据
				}).catch(error => {

					// 处理错误程序代码
				})
			})

axios请求配置

axios({
					url: '目标资源路径',
					method: '请求方法',
					data: {
						参数1:值1,
                        参数2:值2,
                        ......
					}
				}).then(result => {
					
                //处理数据
				}).catch(error => {

					// 处理错误程序代码
				})
			})

 做一个简单的axios请求

axios({
					url: '后端资源地址',
					method: 'post',
					data: {
						username,
						password
					}
				}).then(result => {
					alertFn(result.data.message, true)
					// console.log(result)这个打印的是请求成功后的数据信息
					setTimeout(() =>{
						location.href='登录页面.html'
					},2000)
				}).catch(error => {

					// console.log(error)
					alertFn(error.response.data.message, false)
					// console.log(error.response.data.message)这个地方打印的是浏览器对错误返回的信息
				})
			})

返回信息如图所示:

成功:

错误:

写到这里不得不提一下http响应状态码了,大家有观察到成功返回信息有一个status:200吗? 

1XX 信息
2XX 成功
3XX 重定向消息
4XX 客户端错误
5XX 服务器错误

所以当http响应状态码的值在>200&&<300时是响应成功了的

为了后续的AJAX原理部分,在这里简要说一下请求报文和响应报文(以注册失败为案例)

请求报文 

请求行 method,url,协议
请求头 application/json
空行 分割请求头和请求体
请求体 发送的资源

响应报文

响应行 协议,http响应状态码,状态信息
响应头 application/json
空行 分割响应头和响应体
响应体 返回的资源

 接下来是比较重要的部分:

AJAX原理部分

我们学过简单的axios之后,现在深入XMLHttpRequest对象与服务器通信学习。

使用XMLHttpRequest对象与服务器通信的步骤:

  1. 创建XMLHttpRequest对象
  2. 配置请求方法和请求url地址
  3. 监听loadend事件,接收响应结果
  4. 发送请求send()
let xml = new XMLHttpRequest()
xml.open('请求方法','请求url地址')
xml.addEventListener('loadend',() =>{
        //响应结果
})
xml.send()

XHR查询参数 URLSearchParams

const paramsObj = new URLSearchParams({//创建USP对象
	参数名1:值1,
	参数名2:值2,
	......
})
const queryString = paramsObj.toString()//生成指定格式查询参数

XHR数据提交

 XHR的数据提交必须要手动设置请求头数据

xhr.setRequestHeader('conten-Type','application/json') //设置请求头
const user = {
	key:value,
	...
}
const userStr = JSON.stringify(user) //转化为json字符串
xhr.send(userStr)

promise对象 

promise对象用于表示一个异步操作的最终结果(成功或者失败)以及结果值

const p = new Promise((resolve,reject) =>{
	//执行异步任务并传递结果
	//成功调用resolve则调用then执行
	//失败调用reject则调用catch执行
})
p.then(result =>{
	//成功
}).catch(error =>{
	// 失败
})

Promise对象的三种状态 (一旦兑现不再变化)

pending待定状态 初始状态,未兑现也未拒绝
fulfilled兑现状态 操作成功完成调用then
rejected拒绝状态 操作失败调用catch

AJAX进阶 

同步代码和异步代码

同步代码:逐行执行,需要原地等待结果,才继续向下执行

异步代码:调用后耗时,不必原地等待,在将来完成后触发一个回调函数

回调函数地狱

在回调函数中嵌套回调函数时,会造成可读性变差,异常无法捕获,耦合性严重,牵一发而动全身,可以利用Promise链式调用的方法解决回调函数地狱的问题。

then(回调函数)中的返回值会影响新生成的Promise对象的最终状态和结果

async函数和await 

注意:async函数遵循的是就近原则,如果使用async和await捕获信息的话,给距离最近的函数添加aysnc,语法如下:

const { axios } = require("./axios.min");

async function getDefaultArea(){
	const pObj = await axios({})
	const pname = pObj.data.list[0]
	......
	document.querySelector('province').innerHTML = pname
	......
}
getDefaultArea()

利用try...catch捕获错误 

try{
       //要执行的可能会出错的代码
}.catch(error =>{
        //错误信息
//console.dir(error)
)

 Promise.all方法

合并多个Promise对象,等待所有同时成功完成(或者某一个失败)做后续逻辑

代码格式如下:

const p = Promise.all([Promise对象,Promise对象,Promise对象,Promise对象,...])
p.then(result =>{
	//result结果:[Promise对象成功结果,Promise对象成功结果,Promise对象成功结果,...]
}).catch(error =>{
	//第一个失败的Promise对象抛出的异常
})

最后大家试试用axios做一个页面跳转吧,期待下次博客再见

相关推荐

  1. AJAX学习笔记

    2024-05-13 01:18:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 01:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 01:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 01:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 01:18:02       20 阅读

热门阅读

  1. 前端工程化之---git hooks

    2024-05-13 01:18:02       10 阅读
  2. Git 剔除已经纳入版本管理的文件

    2024-05-13 01:18:02       8 阅读
  3. 代码随想录:二分查找相关题目推荐(35、34)

    2024-05-13 01:18:02       11 阅读
  4. 关于fmt的用法

    2024-05-13 01:18:02       8 阅读
  5. 【C++】string类的模拟实现

    2024-05-13 01:18:02       10 阅读
  6. HashMap在Jdk1.8之前并发扩容下的死循环

    2024-05-13 01:18:02       10 阅读
  7. QT作业4

    QT作业4

    2024-05-13 01:18:02      10 阅读
  8. 邦芒面试:面试时如何有效发挥口才

    2024-05-13 01:18:02       10 阅读
  9. 从零手写实现 tomcat-05-servlet 处理支持

    2024-05-13 01:18:02       11 阅读