嘿,我在 codeigniter View 中有一个 javascript 函数,该函数从 codeigniter Controller 函数中检索一些信息,当达到用户 session 超时时,该函数会表现得很奇怪。在被调用的 php 函数中,我有一个如下所示的语句:
if (!$this->tank_auth->is_logged_in()) {
redirect(site_url('login'));}
如果他们没有登录,这会将他们重定向到我的登录页面。但是在 javascript 函数中,我获取响应文本并将 div 的内容设置为等于它。
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "mycontroller/myfunction/", false);
xmlhttp.send();
document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
如果用户在调用此函数时注销,它将返回登录页面的responseText并将其插入div中,而不是重定向到登录页面。这看起来很糟糕。如果用户 session 在查看此页面时超时,如何阻止它执行此操作?我无法更改超时限制,因为其他应用程序依赖它。
实际上,这根本不是 codeigniter 或 Tank_auth 问题,只是如何从 ajax 请求中调用的 php 函数重定向,而不是当我最初使用该函数为 responseText 生成字符串时。
最佳答案
您需要解析响应并确定它是否是您期望的响应类型。如果您期望字符数低于一定数量,则可以检查长度,但这可能不如检查特定 dom 对象或字符串那么可靠。
例如,您可以这样做:
if(xmlhttp.responseText.length < 200) {
document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
} else {
window.location.href = 'some url';
}
另一种选择是使用 CodeIgniter 的 AJAX 响应检查来执行其他操作,而不是加载 View (或加载不同的 View ):
if ($this->input->is_ajax_request())
{
// do something else
}
else
{
// do what you were doing before
}
希望这有帮助!我会回避使用 PHP/CI 方法,因为听起来你会在代码中的任何地方添加异常,这不太好。不过,这完全取决于您。
关于php - 当 codeigniter/tank auth session 超时时处理 ajax 调用中的 php 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360430/