Internet Explorer中的Javascript故障

Internet Explorer中的Javascript故障,javascript,ajax,internet-explorer,Javascript,Ajax,Internet Explorer,简言之: 如果有人点击更改文本,将触发下一个功能 next函数将相关数据发送到ajax_next_track.php并检索随机数据 然后,它用随机数据替换Artister_name和track_name中的文本 这些都可以在Firefox和Chrome中正常工作。但是,它在Internet Explorer中不存在。如果您在不同的浏览器上单击“更改文本”两次以上,您就会看到问题所在 在其他浏览器中,屏幕上会出现“加载…”文本的操作时间;但它立即发生,在internet explorer中没有操作

简言之: 如果有人点击更改文本,将触发下一个功能

next函数将相关数据发送到ajax_next_track.php并检索随机数据

然后,它用随机数据替换Artister_name和track_name中的文本

这些都可以在Firefox和Chrome中正常工作。但是,它在Internet Explorer中不存在。如果您在不同的浏览器上单击“更改文本”两次以上,您就会看到问题所在

在其他浏览器中,屏幕上会出现“加载…”文本的操作时间;但它立即发生,在internet explorer中没有操作时间

函数next无法将数据发送到ajax文件

那么,我该如何修复它呢

谢谢是预付款

    function next(tags)
    {
        var hr = new XMLHttpRequest();
        var url = 'ajax_next_track.php?tags=' + tags;
        hr.open("GET", url, true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        hr.onreadystatechange = function() 
        {
            if(hr.readyState == 4 && hr.status == 200) 
            {   
               var return_data = hr.responseText;
               jsonObj = JSON.parse(return_data);
               document.getElementById("artist_name").innerHTML = jsonObj.artist_name;
               document.getElementById("track_name").innerHTML = jsonObj.track_name;
               document.getElementById("name").title = 'play '+jsonObj.artist_name+' - '+jsonObj.track_name+' radio';

            else
            {

            }
        }

        document.getElementById("track_name").innerHTML = 'loading...';
        document.getElementById("artist_name").innerHTML = '';
        hr.send(null); 
}

IE调试器中的错误表示第40行document.getElementByIdname为null或不是对象。我在html中看到了名为artist_name和track_name的跨距,但没有名称。

出于某种原因,IE缓存JSON文件,并得到304个未修改的响应,而不是在第一个响应之后每次200个OK

不需要更改服务器端设置的最简单的解决方法是在每个请求中向请求的URL添加一些随机参数,例如

var url = 'ajax_next_track.php?tags=' + tags + '&nocache=' + Math.random();

就在两天前,我遇到了同样的问题。我当时使用的是IE8,后来并没有真正调用ajax,但IE8尝试使用缓存

我在ajax文档页面上找到了这个

默认情况下,始终会发出请求,但浏览器可能会从其缓存中提供结果。若要禁止使用缓存结果,请将缓存设置为false。如果自上次请求后资产未被修改,则要使请求报告失败,请将ifModified设置为true


如果有帮助,试试看。以下是文档

您所说的无法将数据发送到ajax文件是什么意思?你是说next没有接到电话?或者它被调用时出现了一些错误?如果是前者,我们需要看看它是如何被调用的。如果是后者,我们需要看到错误。@PaulTomblin我已经删除并修复了id为name的部件。但主要问题仍然存在;我添加了html,删除并修复了id为name的部分;但是主要的问题仍然存在,我重试了,它工作得很好,只是ajax函数每次都返回相同的相册。问题出在服务器端,而不是您发布的代码上。不可能每次尝试都返回相同的曲目。因为有成千上万的轨道。如果你在其他浏览器上尝试,你会发现问题。在其他浏览器中,也会有加载操作时间。。。屏幕中的文本;但它会立即发生,在internet explorer中没有操作时间。IE缓存响应的原因是HTTP标准RFC 2616要求这样做。@EricLaw,感谢您的澄清。但其他浏览器得到200 OK响应的原因是什么?我试图找出Firebug和IE Dev.Tools分别显示的HTTP头之间的差异,但没有注意到……在某些情况下,其他浏览器不按照标准处理XHR可缓存性。如果没有精确的复制,尤其是响应标题,我无法确定您看到了什么。
var url = 'ajax_next_track.php?tags=' + tags + '&nocache=' + Math.random();