ajax前端异常拦截,若ajax未执行完毕,页面刷新时ajax进入error问题

处理方法 在error做出错误动作之前先判断页面是否已经加载完毕就好了。。。真鸡儿完美
//拦截所有的ajax的get方式请求,并且,如果其中有校验错误信息,或者系统异常信息,则弹出并返回
$.ajaxSetup({
//请求方式,默认为get
type: “GET”,
//请求失败遇到异常触发
error:function(xhr,state,errorThrown){
//: 判断网页是否加载完成
document.onreadystatechange = function () {
if(document.readyState==“complete”) {
alertMsg(xhr);
}
}
}
})
//拦截所有的ajax的post方式请求,并且,如果其中有校验错误信息,或者系统异常信息,则弹出并返回
$.ajaxSetup({
//请求方式,默认为get
type: “POST”,
//请求成功后触发
// success: function(){
// alert(1);
// },
//请求失败遇到异常触发
error:function(xhr,state,errorThrown){
/判断页面是否加载完成/
document.onreadystatechange = function () {
if(document.readyState==“complete”) {
alertMsg(xhr);
}
}
}
//完成请求后触发。即在success或error触发后触发
// complete:function(xhr,state,errorThrown){
// alert(0);
// }
})
//判断异常信息,并弹出并返回
function alertMsg(xhr) {
//统一的异常信息
var errorAlert=“系统发生异常,请您稍后再试”;
//拦截到的校验未通过的信息,或者系统异常信息
console.log(xhr);
var errRes=xhr.responseText;
console.log(“errRes:”);
console.log(errRes);
if(errRes == null || errRes==undefined){
console.log(1);
alert(errorAlert);
return;
}

var errJSON;
try {
    console.log(2);
    errJSON=JSON.parse(errRes);//如果能转json格式,则是校验错误信息,否则是系统异常信息
} catch(err) {
    console.log(3);
        alert(errorAlert+":"+errRes);
        return;
}
console.log(4);
if(errJSON ==null){
    console.log(5);
    console.log(errJSON);
    alert(errorAlert);
    return;
}
console.log(6);
//根据返回状态码,如果是1,则是校验信息错误
var status=errJSON.status;
if(1==status){
    var errMsg=errJSON.errorMsg;//校验的错误信息
    if(errMsg!=null){
        alert(errMsg)
        return;
    }else{
        alert(errorAlert);
        return;
    }
}else{
    alert(errorAlert);
    return;
}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 jQuery 的 AJAX 发送 POST 请求,如果请求的地址是跨域的,浏览器会拦截请求,因为浏览器有同源策略,不允许跨域请求。 解决跨域问题的方法有很多种,其中一种常用的方法是通过前端代理来转发请求。具体步骤如下: 1. 在前端项目中设置一个代理服务器。 2. 在代理服务器上开启一个接口,用于接收前端发送的请求。 3. 在代理服务器上发送一个 AJAX 请求到目标地址,并将目标地址的响应返回给前端。 4. 在前端代码中将请求地址改为代理服务器的地址。 下面是使用 Express 框架实现一个简单的代理服务器的示例代码: ```javascript const express = require('express'); const request = require('request'); const app = express(); app.post('/api/proxy', (req, res) => { // 获取前端发送的 POST 请求数据 const postData = req.body; // 目标地址 const targetUrl = 'http://example.com/api'; request.post({ url: targetUrl, json: postData }, (err, response, body) => { if (err) { console.error(err); return res.status(500).send('Proxy error'); } // 将目标地址的响应返回给前端 res.send(body); }); }); app.listen(3000, () => { console.log('Proxy server is running on port 3000'); }); ``` 在前端代码中,将请求地址改为代理服务器的地址即可: ```javascript $.ajax({ url: 'http://localhost:3000/api/proxy', type: 'POST', data: { key1: 'value1', key2: 'value2' }, success: (data) => { console.log(data); }, error: (xhr, textStatus, errorThrown) => { console.error(xhr, textStatus, errorThrown); } }); ``` 注意:上述示例代码中使用了 Express 框架和 request 模块,请确保安装了这两个模块。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值