javascript - getElementById 仅在停用缓存时在 Internet Explorer 中工作

标签 javascript internet-explorer

我有一个小函数,它从服务器加载一个 JSON 文件并在网站上显示它的属性。由于我的代码嵌入在一个旧的遗留系统中,我不能使用 jQuery 或任何其他框架。

加载信息工作正常,但当我尝试将其设置为元素时,该元素始终为 null:

var element = document.getElementById("some_element_id");
element.innerHTML = output; // element is always NULL here

这只发生在 Internet Explorer 9 中,所有其他浏览器(和其他版本的 IE)都可以正常工作。最奇怪的是:如果我停用浏览器缓存,它每次都有效。我通过 IE 开发人员工具中的设置“始终从服务器刷新”来停用缓存。有什么想法可以通过使用 JavaScript 来实现吗?我们有很多不同的 IE 安装,只需要通过服务器端操作(例如更改代码,而不是 IE 设置)来解决这个问题。

编辑

我检查了 getElementById 不工作的所有已知问题,例如在 DOM 准备好后加载 JS,ID 仅存在一次,不存在名称和 ID 冲突等。

编辑2

提供更多可能相关的上下文:我们正在从服务器加载 JSON 文件并使用以下代码访问它(我们现在这并不理想,但同样,我们正在使用 vanilla JS 和必须支持IE6以上):

var jsondata = eval("(" + req.responseText + ")");

浏览器缓存似乎影响了 JSON 文件的加载。如果直接从服务器加载,代码似乎可以工作。如果从缓存中加载,就会出现问题。

最佳答案

首先,您正在缓存实际元素,您可以尝试缓存 document.getElementById 并让缓存方法根据请求请求 DOM 元素;

var doc = 文档; var get = doc.getElementById; get.call(doc, 'some_element_id');

还有

如果你随时看到304,这是因为请求的对象自上次请求后没有改变,在IE <= 10中,当当前值和上一次没有变化时不返回响应体值(value)。您可以修改您的请求 header 以禁用此请求的缓存; “缓存控制”、“无缓存、无存储、必须重新验证”

关于javascript - getElementById 仅在停用缓存时在 Internet Explorer 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26277630/

相关文章:

javascript - 当在 IE11 的 URL 字段中按下 Ctrl 时,jQuery keydown 处理程序接收 keydown 事件

php - 提取 MP3 URL 的专辑封面图像

javascript - 我的 jQuery POST 请求有什么问题?

javascript - 有没有一种在 JQuery 中切换选项卡的方法?

javascript - 输入文本的文本对齐方式

php - 设置最小密码长度

javascript - Ganache 地址参数被覆盖 Web3 -0.2

javascript - 如何解析迄今为止的 localStorage Item?

c++ - 为什么 IHTMLImgElement 方法 put_src 在从线程调用时返回 E_OUTOFMEMORY?

java - Content-Disposition 设置的文件名在IE6 中被忽略。来自 web.xml 的 URL 显示为文件名