【问题标题】:Handle session timeout when loading data through ajax with jquery DataTables使用 jquery DataTables 通过 ajax 加载数据时处理会话超时
【发布时间】:2015-02-18 22:39:18
【问题描述】:

我的应用程序在登录之后,所以当通过 ajax 加载数据时,我需要验证用户仍然有一个活动会话。如果用户没有活动会话,我返回echo json_encode(array('TIMEOUT'));,输出["TIMEOUT"]。如何阅读该响应并将用户送回登录页面?

在以前版本的 DataTables 中,我能够做到以下几点:

"fnServerData": function ( sSource, aoData, fnCallback, result ) {
                            $.getJSON( sSource, aoData, function (json) { 
                              if(json == "TIMEOUT")
                              {
                                window.top.location.href = "/sign_out?action=to";
                                return;
                              }

                              fnCallback(json)
                            } );

在 DataTables 1.10 中,fnServerData 已替换为 ajax(请参阅 docsajax.data)。如何使用新的 DataTables 版本完成同样的事情?我觉得我很接近,但它只是不工作......可能是因为我在尝试解析响应时做错了(我从未在 if 语句中点击)。

"ajax": {
        "url": "/account/location_load",
        "data": function (myJson) { 
            if(myJson == "TIMEOUT")
            {
              window.top.location.href = "/sign_out?action=to";
              return;
            }

            return myJson;
          }
      }

【问题讨论】:

  • 嘿@justanotherprogrammer,已经删除了我的答案-无论如何它应该是一个评论,在我看来实际上有“答案”状态并不是很好:)但是如果你的回复真的是json_encode(array('TIMEOUT'))那么if (myJson[0] == "TIMEOUT") 将是正确答案。
  • 我想知道是否只是 DataTables 中的 data 选项导致它不起作用?也许在任何其他情况下它都会起作用,我只是不知道。感谢您的宝贵时间!
  • 只是一个想法 - 尝试在 ajax 调用中设置 dataType : 'json' ...
  • 好主意,但是,恐怕没有任何区别。使用 dataSrc 而不是 data 仍然是我让它工作的唯一方法。

标签: php jquery jquery-datatables datatables-1.10


【解决方案1】:

经过一天半的努力,我终于找到了使用ajax.dataSrcdoc)的可行解决方案

"ajax": {
        "url": "/account/location_load",
        "dataSrc": function (myJson) {

            if(myJson == "TIMEOUT")
            { 
              window.top.location.href = "/sign_out?action=to";
              return "";
            }

            return myJson.data;
          }

我不知道为什么这个版本允许我阅读 myJson 而另一个不允许,但它确实有效。工作的 PHP 代码最终变成了echo json_encode('TIMEOUT');

【讨论】:

  • 您应该在允许时将您的答案标记为已接受。也许这会在未来对其他人有所帮助。
  • 它不会让我直到明天,但我一定会的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多