情况:
我的网络应用程序受密码保护。对于我们向服务器发出的每个 http 请求,都会根据会话进行检查。如果会话已过期,则会将用户转发到登录页面。 这适用于http请求。但如果它是一个AJAX请求,那么就像http请求一样,如果会话已经过期,它也会被转发到登录页面。
问题:
如果我们在浏览器中直接显示AJAX响应,那么代替我们预期的响应将在浏览器中显示登录页面内容。如果您要获取任何预期格式的数据,那么它将抛出JavaScript错误。 / p>
我的代码:
<script>
function details() {
var xyz = document.getElementById("name").value;
// Returns successful data submission message when the entered information is stored in database.
var dataString = 'name=' + xyz;
// AJAX code to submit form.
$.ajax({
type: "POST",
url: "user.php",
data: dataString,
cache: false,
success: function(html) {
document.getElementById("content").innerHTML=html;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (XMLHttpRequest.status === 401) {
location.href = 'index.php';
}
}
});
return false;
}
</script>
当我通过我的代码调用Ajax请求时,on session time out。它会将 login.php 内容加载到当前页面,而不是将用户转发到登录页面。
指导我在哪里做错了。
感谢。
答案 0 :(得分:2)
如果您正在使用多个ajax请求,那么您可以使用jquery ajaxComplete函数。
每次在ajax调用之后但在附加到该ajax事件的成功或失败函数之前运行此函数。
例如,这段代码是:
jQuery("body").ajaxComplete(
function(event, request, options) {
if (request.responseText == "login_required") {
window.location.href = "login.php";
}
}
);
在服务器端,您只需检查请求是否是ajax请求,如果用户未登录,只需打印“login_required”并停止执行代码(退出代码)。
用户将重定向到login.php页面