2013-07-12 81 views
0

Here is a demo簡而言之: 如果有人點擊更改文本next()函數將被觸發。Internet Explorer中的Javascript故障

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> 
+1

你是什麼意思的「不能發送數據到ajax文件」?你的意思是「下一個」沒有被調用?或者它被調用,並且有一些錯誤?如果前者,我們需要看看它是如何被調用的。如果是後者,我們需要看到錯誤。 –

+0

@PaulTomblin我已刪除並修復id名稱的部分。但主要問題仍然存在;並且我已經添加了html。 – Tahtakafa

回答

4

就在兩天前我遇到了同樣的問題。我使用的是IE8,後來的ajax調用並沒有真正實現,但IE8嘗試使用緩存來代替。

我發現這個AJAX文檔頁面上

默認情況下,請求總是發出,但瀏覽器可以提供結果出來了cache的。要禁止使用緩存的結果,請將cache設置爲false。如果資產自上次請求後未被修改,則導致請求報告失敗,請將ifModified設置爲true。

試試看是否有幫助。這裏的文檔http://api.jquery.com/jQuery.ajax/

2

在IE的調試器的錯誤說line 40 document.getElementById("name") is null or not an object.我看到一個名爲 「這位演出」,並在你的HTML 「TRACK_NAME」 跨度,但不 「名」。

+0

我已刪除並修復了其名稱爲id的部分;但主要問題仍然存在。 – Tahtakafa

+0

我重試了它,它工作正常,除了你的ajax函數每次都返回相同的相冊。這個問題出現在服務器端,而不是你發佈的代碼。 –

+0

每次嘗試都返回相同的曲目是不可能的。因爲有成千上萬的曲目。如果您嘗試使用其他瀏覽器,則會看到問題。在其他瀏覽器中,在屏幕中加載...文本時會有一段操作時間;但是它在Internet Explorer中立即發生,沒有操作時間。 – Tahtakafa

3

由於某種原因,IE緩存JSON文件,並在第一次後得到304未修改響應,而不是每次200 OK。

無需更改服務器端設置的最簡單解決方法是在每個請求中爲請求的URL添加一些隨機參數,例如,

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

IE緩存響應的「原因」在於HTTP標準(RFC 2616)所要做的。 – EricLaw

+0

@EricLaw,感謝您的澄清。但其他瀏覽器獲得200 OK響應的原因是什麼?我試圖找出Firebug和IE Dev顯示的HTTP頭之間的區別。工具,但沒有注意到它... –

+0

在某些情況下,其他瀏覽器不會根據標準處理XHR緩存能力。沒有確切的repro(特別是響應頭文件),我無法確定你所看到的是什麼。 – EricLaw