1

嘿,我在 codeigniter 视图中有一个 javascript 函数,它从 codeigniter 控制器函数中检索一些信息,当达到用户会话的超时时,该函数的行为异常。在被调用的 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 中,而不是重定向到登录页面。这看起来很可怕。如果用户会话在查看此页面时超时,我该如何阻止它执行此操作?我无法更改超时限制,因为其他应用程序依赖它。

真的,这根本不是 codeigniter 或 tank_auth 问题,只是当我最初使用该函数为 responseText 生成字符串时,如何从 ajax 请求中调用的 php 函数重定向。

4

2 回答 2

1

您需要解析响应并确定它是否是您期望的响应类型。如果您期望少于一定数量的字符,您可以检查长度,但这可能不如检查特定的 dom 对象或字符串可靠。

你可以这样做,例如:

if(xmlhttp.responseText.length < 200) {
    document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
} else { 
    window.location.href = 'some url';
}

另一种选择是使用 CodeIgniter 的 AJAX 响应检查来执行其他操作,而不是加载视图(或加载不同的视图):

if ($this->input->is_ajax_request())
{
    // do something else 
}
else
{
    // do what you were doing before
}

希望这可以帮助!我会回避使用 PHP/CI 方法,因为听起来你会在代码中到处添加异常,这并不漂亮。不过,这完全取决于你。

于 2012-09-11T14:05:43.577 回答
0

如果你很了解你的登录设计。你可以像这样处理你的回应。

success: function (response) {

if(result.substring(0, 15) == '<!DOCTYPE html>') //Your login's HTML initials.
    window.location = site_url_path + 'login'; //session timeout redirection.
//your normal functionality

}

当您在控制器的构造中编写重定向时,这将很有帮助。

于 2017-06-01T09:11:48.907 回答