我有一个小函数,它从服务器加载一个 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/