Javascript 当缓存被停用时,getElementById仅在Internet Explorer中工作

Javascript 当缓存被停用时,getElementById仅在Internet Explorer中工作,javascript,internet-explorer,Javascript,Internet Explorer,我有一个小函数,它从服务器加载一个JSON文件,并在网站上显示它的属性。因为我的代码嵌入了一个旧的遗留系统,所以我不能使用jQuery或任何其他框架 加载信息可以正常工作,但当我尝试将其设置为元素时,该元素总是null: var element = document.getElementById("some_element_id"); element.innerHTML = output; // element is always NULL here 这只发生在InternetExplorer

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

加载信息可以正常工作,但当我尝试将其设置为元素时,该元素总是
null

var element = document.getElementById("some_element_id");
element.innerHTML = output; // element is always NULL here
这只发生在InternetExplorer9中,所有其他浏览器(以及IE的其他版本)都工作正常。最奇怪的是:如果我停用浏览器缓存,它每次都会工作。我通过IE开发者工具中的设置“总是从服务器刷新”来停用缓存。有没有办法通过使用JavaScript来实现这一点?我们有很多不同的IE安装,只需要通过服务器端操作(例如更改代码,而不是IE设置)来解决这个问题

编辑 我检查了getElementById的所有已知问题,例如,在DOM就绪后加载JS,ID只存在一次,没有名称和ID冲突等

编辑2 为了提供更多的上下文,这可能是相关的:我们正在从服务器加载JSON文件,并使用以下代码来访问它(我们现在认为这并不理想,但再次强调,我们使用的是vanilla JS,并且必须支持IE6以上):


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

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

var doc=单据;
var get=doc.getElementById;
调用(doc,'some_element_id')


如果您在任何时候看到304,这是因为请求的对象自上次请求以来没有更改,在IE中,我们可以使用更多上下文。就像实际的代码(JS/HTML)一样,这两行代码都在中使用。你确定加载DOM后Javascript正在运行吗?@Cerbrus我可以提供更多的上下文,但奇怪的是:它在其他浏览器中工作,甚至在IE8中。我的脚本是在DOM准备好之后执行的,让它一直工作的唯一方法是停用浏览器缓存…元素是通过回调异步添加的吗?从缓存加载页面将更改时间。如果你在inspector中查看DOM,那么回调也可以运行。好的,只是检查一下你没有犯明显的错误,问题是没有一些可以让人们玩的东西,我不确定你会得到任何有意义的答案。
var jsondata = eval("(" + req.responseText + ")");