0

这是一个演示简而言之:如果有人点击更改文本next()功能将被触发。

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

然后它用随机数据替换文本artist_nametrack_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); 
}

<div id="player">
    <div id="playPauseOutDiv" onclick="pause();">

    </div>
        <div id="artist_track">
            <span id="artist_name">gerry rafferty</span> 
            <span id="track_name">baker street</span>
        </div>
    </a>

    <div id="ikinciSatir">
        <a id="changeSong" title="Shuffle" href="javascript:void(0);" onclick="next('3871');">Change</a>
    </div>
</div>
4

3 回答 3

4

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

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

默认情况下,总是发出请求,但浏览器可能会从其cache. 要禁止使用缓存的结果,请设置cachefalse。如果自上次请求以来尚未修改资产,要使请求报告失败,请将 ifModified 设置为 true。

试试看是否有帮助。这是文档http://api.jquery.com/jQuery.ajax/

于 2013-07-12T22:59:14.100 回答
3

出于某种原因,IE 缓存 JSON 文件并在第一次之后每次都得到 304 Not Modified 响应而不是 200 OK。

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

var url = 'ajax_next_track.php?tags=' + tags + '&nocache=' + Math.random();
于 2013-07-12T22:54:41.650 回答
2

IE 调试器中的错误说line 40 document.getElementById("name") is null or not an object. 我在您的 html 中看到名为“artist_name”和“track_name”的跨度,但没有“名称”。

于 2013-07-12T22:39:27.797 回答