gpt4 book ai didi

jQuery Ajax 的 statusCode 问题

转载 作者:行者123 更新时间:2023-12-01 05:15:13 25 4
gpt4 key购买 nike

使用 jQuery 执行 ajax POST,因为页面要求用户进行身份验证,有时(当 session 过期时),服务器会响应 302。所以我试图从 ajax 捕获该响应代码并重定向到主页。

我的ajax看起来像这样:

$.ajax(this.action, {
type: "POST",
data: {value:input},
statusCode: {
301: function(resp){
window.location.replace('/');
},
302: function(resp){
window.location.replace('/');
}
},
success: function(response){
$('#obtained').val(response);
},
error: function(error){
alert(error);
}
});

但由于某种原因,302 或任何其他状态代码中的函数永远不会被触发。

这是已弃用的还是我遗漏了什么?

谢谢!

最佳答案

嗯,显然问题出在 302 重定向上。服务器确实返回 302,但是,ajax 遵循该重定向并最终获得 200 状态代码,这导致 302 状态代码内的函数永远不会被触发。

解决方案是使用此问题中的一些回复:How to manage a redirect request after a jQuery Ajax call

最终的 ajax 调用如下所示:

    $.ajax({
type: "POST",
data: {value:input},
statusCode: {
301: function(response){
window.location.reload();
},
302: function(response){
window.location.reload();
}
}
}).done(function(data, statusText, xhr){
var contentType = xhr.getResponseHeader("Content-Type");
if (xhr.status === 200 && contentType.toLowerCase().indexOf("text/html") >= 0) { //handles session expiration
window.location.reload();
}else{
$('#obtained').val(data);
}
});

服务器确实返回 302,ajax 会跟随该错误到登录页面,并且由于当前代码期望文本/纯内容类型作为“正确”响应,所以它会遇到登录页面中的 text/html,这就是它在重定向后发现,触发 window.location.reload() 进行实际的重定向。

关于jQuery Ajax 的 statusCode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50300558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com