后端302触发了jquery ajax的error事件

findever 发布于 2015/03/04 09:29
阅读 6K+
收藏 0
$.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事件,后续的不会,亦不明真相,求赐教

加载中
0
悲剧的码农先生
悲剧的码农先生
//看jQuery里的成功状态判断,可见302不在成功之列
// Determine if successful
isSuccess = status >= 200 && status < 300 || status === 304;



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

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

促发条件有这些:

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

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



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

findever
findever
thanks, 我试下
返回顶部
顶部