原生js ajax超时处理,原生js里的ajax

在说ajax之前需要先了解两个概念,那就是js语言中的同步和异步

1:同步是什么 (Synchronous)

在一个任务进行时,不能开启其他的任务

同步访问:浏览器在想服务器发送请求的时候,只能等待服务器的响应,不能够做其他的事

使用场景:

1:地址栏输入url,访问页面

2:a标签的跳转

3:from表单的提交

2:异步的概念 (Asynchronous)

在一个任务进行时,可以进行其他的任务

异步访问:浏览器在想服务器发送请求的时候,用户还能在页面上做其他操作

使用场景:

1:用户名注册的验证

2:百度的搜索建议

3:股票软件

3什么是AJAX

Asynchronous javascript and xml (异步的js和xml)

注:xml是一种数据承载方式,如今被json取代

原理:使用js提供的异步对象XMLHttpRequest异步的向服务器发送请求

并且接受服务器响应回来的数据

4使用ajax

ajax从发送数据到接受数据一共分为4个步骤

(1):创建异步对象

var xhr=new XMLHttpRequest();

console.log(xhr);//会打印出xml对象

(2):打开连接创建请求

xhr.open('get','http://127.0.0.1:8080/login',true);

open()里边第一个参数为请求方法(必须为字符串),第二个为服务器ip地址(也必须为字符串)

第三个布尔值表示是否使用异步(true为是/false则为否)

(3):发送请求

xhr.send();

send()里为请求参数,post方法为fromdata

get方法则没有可以不写,或者填入null

(4):绑定监听接受响应数据

第4步相较前3步会复杂一点,也是原生ajax的难点

再说ajax第4步之前,要先了解几个xml对象属性(第一步会在控制台打印出来)

(1 xhr.readyState属性(表示xhr对象的请求状态,一共5个状态)

0:请求未初始化,还没有调用 open()。

1:请求已经建立,但是还没有发送,还没有调用 send()。

2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。

3:请求在处理中;通常响应中已有部分数据可用了,没有全部完成。

4:响应已完成;您可以获取并使用服务器的响应了

(2 onreadystatechange属性

请求状态改变的事件触发器

(3 responseText属性

服务器响应的文本内容

(4 status属性

服务器返回的http状态码 200为成功(状态码内容较多,请自行查阅相关文档)

以下就是第4步的内容

request.onreadystatechange = function () { // 状态发生变化时,函数被回调

if (request.readyState === 4) { // 成功完成

// 判断响应结果:

if (request.status === 200) {//状态码为200时

// 成功,通过responseText拿到响应的文本:

return success(request.responseText);

} else {

// 失败,根据响应码判断失败原因:

return fail(request.status);

}

} else {

// HTTP请求还在继续...

}

}

虽然现在基本没有人用原生AJAX发送请求了,但vue2.0之后如axios也是基于xml对象进行的封装所以还是有必要进行了解其原理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Axios是一个流行的基于JavaScript的HTTP客户端库,用于向服务器发送HTTP请求。当我们使用Axios发送请求时,有时可能会遇到请求超时的情况,这可能是由于网络不稳定或服务器处理时间过长引起的。 在Axios中,我们可以通过设置超时时间来处理请求超时的问题。超时时间表示发送请求后,等待服务器响应的最大时间。如果在超时时间内没有收到响应,则会中断当前请求,并执行重新请求。 以下是实现Axios请求超时重新请求的一般步骤: 1. 首先,在Axios的配置中设置一个合适的超时时间,可以根据实际情况酌情调整。例如,设置超时时间为5秒: ``` axios.defaults.timeout = 5000; ``` 2. 在发送请求前,使用Axios的拦截器对请求进行拦截,以便在请求超时时执行重新请求的操作。拦截器是一种在请求或响应被处理前拦截它们的过程,我们可以在其中做一些自定义的操作。 3. 在请求拦截器中,使用Promise.race方法来实现请求超时的判断。Promise.race方法接受一个由Promise组成的数组,返回最先解决或拒绝的Promise的结果。我们可以同时监听响应和超时Promise,当其中一个先响应时,取消另一个非必要的操作。 4. 当请求超时时,取消当前请求,并通过重新调用Axios发送请求来重新尝试。 下面是一个使用Axios处理请求超时并重新请求的示例代码: ```javascript axios.interceptors.request.use( config => { const timeoutPromise = new Promise((resolve, reject) => { setTimeout(() => { reject(new Error('请求超时')); }, 5000); }); return Promise.race([timeoutPromise, config]); }, error => { return Promise.reject(error); } ); axios.get('https://example.com/api') .then(response => { // 处理响应数据 }) .catch(error => { if (error.message === '请求超时') { // 重新发送请求 axios.get('https://example.com/api') .then(response => { // 处理响应数据 }) .catch(error => { // 处理重新请求失败情况 }); } else { // 处理其他错误情况 } }); ``` 通过以上步骤和示例代码,我们可以实现在Axios中处理请求超时并重新发送请求的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值