你如何使用ajax进行服务器端调用?

时间:2014-01-28 15:46:39

标签: jquery ajax server-side-scripting

我使用jquery,css和html构建了一个网站。我使用ajax调用从我的服务器上的平面文件中检索数据并绘制图表。问题是有一个身份验证供应商应用程序,用户必须进行身份验证才能访问该站点。此供应商应用程序有30分钟的空闲时间,如果用户在30分钟内没有执行任何操作,则会超时。

问题在于,当它发生时,页面不会按预期进入登录页面。

我认为我需要进行服务器端调用以强制我的页面通过登录页面。

我已创建此脚本执行服务器调用以强制页面获取登录页面,但它似乎不起作用。

我有什么想法可以解决这个问题?这是我的剧本:

<script>
$(document).ready(function(){
    function continueSession() {
        setTimeout(function(){
            $.get("somepage.php").always(continueSession);
        },30*1000);
    }
continueSession();
});
</script>

somepage.php是服务器上的虚拟文件,不执行任何操作。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

在发出ajax请求时,只需检查响应代码即可。如果收到错误,请将用户发送到登录页面。

$.get("somepage.php").always(function (response) {

  // check response code
  if (response.status !== 200) {

    // did not succeed. redirect to loging page
    window.location.replace("login_page.php");
    return;
  }

  // response is ok
});

您还可以使用响应中的location标头来确定重定向的位置。

$.get("somepage.php").always(function (response) {

    // check if it's a redirect (300 code)
    if (Math.round(response.status / 100.0) * 100 === 300) {

      // redirect to the location header
      window.location.href = response.getResponseHeader("location");
      return;
    }
});

您可以执行以下操作来检查间隔

var checkSession = function () {

  var isRedirect = function (code) {
    return Math.round(code / 100.0) * 100 === 300;
  };

  $.ajax({
    type  : "HEAD", // https://ochronus.com/http-head-request-good-uses/
    async : true,
    url   : "somepage.php",
    success: function (_, _, response) {
      if (isRedirect(response.code)) {
        window.location.href = response.getResponseHeader("location");
      }
    }
  });
};

$(function () {
  // check the session every 30 seconds
  setInterval(checkSession, 30*1000);
});