javascript - 在用户不刷新时更新 Web 应用程序

标签 javascript php

<分区>

在我的工作中,我为 Web 应用程序编写代码,因此新代码会相对频繁地推送到服务器。不过,我们遇到了一个问题,该应用程序的某些用户倾向于一次在浏览器窗口中将其打开长达数天。然后他们遇到了这个问题:

  1. 他们将数据输入到上周仍在其计算机上运行的应用程序中。
  2. 他们试图保存他们的数据,这有时会不起作用,因为服务器上的代码比他们本地机器上的代码更新(即,他们客户端上的 JavaScript 正在发送与新代码不同的数据在服务器上期望)。
  3. 他们不能简单地刷新页面来重新下载已更改的 JavaScript 代码,否则他们会丢失数据。

处理这种情况的正确方法是什么?我当然想到了明显的解决方案,比如告诉这些用户不要那样做,或者永远不要更改我的 AJAX API,这样请求就不会失败,但我希望有更好的方法来处理这个问题。

特别是,我们的环境由服务器上的 PHP、客户端上的 JavaScript 和用于管理源代码的 git 组成。我并不特别担心支持旧版本的 IE 等(至少在这个问题上)。

最佳答案

在过去,我通过一个不断轮询的脚本来解决这个问题,该脚本轮询 revision.txt 或服务器上的类似内容,其中的版本号在每次部署时递增。

当版本更改时,我要么弹出一条消息,表明他们需要刷新/禁用 UI,要么强制刷新它们(这通常很恶心,可能会让他们生气)。

类似这样的概念:

var createVersionChecker = function(seconds) {
  var version = null;

  var checkVersion = function() {
    $.get('/version.txt', function(response) {
      if(version == null) {
        version = response;
        return;
      }

      if(version != response) {
        // do some logic to show the user that they need to refresh
        // or force refresh them.. ick!
      }
    });
  };

  setInterval(checkVersion, seconds * 1000);
};

createVersionChecker(60);

关于javascript - 在用户不刷新时更新 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802678/

相关文章:

javascript - 如何使用 ajax-jquery 将选定的复选框数据获取到使用 PHP-CodeIgniter 的模态

php - 如何确保SQL查询中的字段是唯一的?

php - 选择抽奖券中奖者

php - 使用 PDO 将数据插入 mysql,返回错误 HY093

javascript - 使用 Google 的 Closure Compiler 缩小字符串的正确方法是什么?

javascript - 如何将日期选择器格式更改为 YYYY-MM-DD

javascript - removeEventListener 会删除 HTML 属性吗?

javascript - 似乎无法在页面加载时滚动到 div 的底部(angularJS)

php - 优化大型 MySQL SELECT WHERE IN 语句

php - 每四个值分隔数组并使 MySql 插入