开发者社区> 问答> 正文

后端302触发了jquery ajax的error事件? 400 报错

后端302触发了jquery ajax的error事件? 400 报错

$.ajax({ type : 'POST', url : url, data : params, async : async || true, dataType : 'json', cache : false, success : function(data, textStatus){				}, error : function(xhr) { if( xhr.status == "200"){ // 兼容调试时301/302重定向导致触发error的问题 console.log(xhr); this.success(eval('('+xhr.responseText+')'),xhr.statusText); return; } alert("请求失败!"); return; }, beforeSend : function() {}, complete : function(event,request) {} });


如上,假如后端请求为302跳转,前端的jquery ajax方法会触发error函数,但是拿到的status却是200,也就是重定向后的结果,我现在是在error函数中重新判断一次再调用success来曲线解决,想请教下这是什么原因造成的,有什么更好的解决办法?

另外,每个页面如果有多次请求(后端均为302重定向),只有第一次会触发error事件,后续的不会,亦不明真相,求赐教

展开
收起
爱吃鱼的程序员 2020-06-01 10:44:42 1572 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    //看jQuery里的成功状态判断,可见302不在成功之列
    // Determine if successful
    isSuccess = status >= 200 && status < 300 || status === 304;



    ######问题在于我在error函数中获取的xhr对象中状态码是200,证明jquery应该是302跳转重新获取了数据的,应该以302后的请求作为事件触发的标准才对######

    不要使用ERROR属性。使用Ajax Promise的.fail()

    促发条件有这些:

    400 401 403 404 500/ 其他条件不会触发。

    $ajax({}
     //code here
    ).done(function(){})
     .fail(function(jqXHR){
    })
     .always(function(){});



    这样应该不会有问题吧。可以试试。

    ######thanks, 我试下
    2020-06-01 10:44:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
十分钟上线-使用函数计算构建支付宝小程序服务 立即下载
机器学习在互联网后端技术中的应用 立即下载
探究 Node.js 的服务端之路 立即下载