javascript - ajax 加载页面上的 JS 与服务器端代码和 HTML 不同步

标签 javascript jquery ajax

我有一个主要使用 AJAX 调用加载的网站。 javascript 和 CSS 文件仅在页面首次加载时加载一次。

我的问题是 javascript/CSS 可能与 HTML 和服务器端代码不同步。该页面可以使用旧版本的 javascript 文件(从页面首次加载时开始),而服务器端代码和 ajax 加载的 HTML 文件始终使用最新的代码和文件。

处理这个问题有哪些策略?

我考虑过按设定的时间间隔轮询服务器并询问是否有更新版本的 JS。然后,如果有,则重新加载页面。但是,这似乎会变得丑陋,页面会在尴尬的时刻突然重新加载,而不是例如由于用户发起的调用而重新加载。

此外,对 javascript 进行了一些更改,但不一定需要重新加载页面。例如,更改可能会影响与用户所在页面/模块不同的页面/模块。

在每次 Ajax 调用时重新加载 javascript 是不可行的

我可以想象出丑陋的解决方案,但我想我应该先问一下。

编辑(回应评论和建议的答案)

让 JS 恢复同步的唯一方法是重新加载页面,然后页面加载新的 JS。向旧页面添加新的 JS 是行不通的,因为它不会删除任何旧的函数、监听器等。我不是在问如何重新加载页面或如何加载 javascript。我要求一种知道何时执行此操作的策略,尤其是以一种对用户来说不显得尴尬的方式。人们是否会加入轮询来询问是否有新的 JS 版本?然后他们会突然(从用户的 Angular )重新加载页面吗?即使选项卡隐藏,他们也会进行轮询吗?这是服务器的问题吗?他们在哪里跟踪最新所需的 JS 版本?或者,他们是否会询问每个 AJAX 请求 - 嘿,我应该重新加载吗?他们为此编写了一个特殊的函数吗?他们是否使所有新的 html/服务器代码向后兼容 js?

有人处理过这个问题,你是怎么做的?

最佳答案

两种可能的解决方案包括

  • 调用 $.getScript() 从服务器端检索、更新 document 中的变量以匹配 document 中的变量在调用 $.ajax(/* settings */) 之前;

  • 或者可以使用 Web Workers 更新原始 document 变量,以匹配 $.ajax(/* settings * 的 beforeSend 处的服务器端变量/)

在任一方法的第一步的结果中,中止 $.ajax() 调用,调用错误处理程序,通知用户,向服务器发送有关错误的消息。

关于javascript - ajax 加载页面上的 JS 与服务器端代码和 HTML 不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680181/

相关文章:

javascript - SerializeArray 表行包含输入和/或文本。如何?

jquery - 如何停止jQuery(html)下载内部图片和资源

ajax - 在爬虫页面加载后更改 AJAX 链接?

javascript - 带有附件的电子邮件编辑器 Phonegap 插件无法在 iOS 中使用 imageURI

javascript - 左对齐的 div 不以某些页面大小为中心

javascript - 使用 jquery/javascript 从日期获取日期

javascript - 在打印 body 标记后更改 onload 事件,在文档正文中使用 jQuery .ready()

javascript - 使用 AJAX 响应提交数据并修改文档

php - 多个 like 或多个 where 子句

javascript - 与 window.history.back() 不一致