2011-05-04 142 views
1

我有一段JavaScript代碼,帶有一個ajax請求,可以打印出在IE8中不起作用的XML文件的內容。 我遇到了一些建議,當我GOOGLE了這個問題,我已經嘗試了那些似乎與我正在嘗試做的事情相關的東西。我將下面一行添加到我的.htaccess文件中:AddType application/xml .xml .rss;我爲我的代碼添加了overridemimetype,並在我的xml文件的開頭添加了以下行:header('Content-type:text/xml')。這些都不會對IE8的輸出產生任何影響,但是將內容類型行添加到XML文件中會停止它在Firefox中的使用。我以爲我必須誤解有關內容類型的內容,所以我試圖將它包含在創建XML文件的php文件中。當我把它放在PHP文件的開頭時,我得到了這個警告:警告:不能修改標題信息 - 已經發送的標題。我試圖在創建XML文件的函數的開頭,但沒有任何效果。我正在使用的代碼是Ajax和Internet Explorer

<html> 
<head> 
<body> 

    <script type ="text/javascript"> 

     if (window.XMLHttpRequest) 
     { 
      xhttp=new XMLHttpRequest(); 
     } 
     else // 
     { 
      xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     if (xhttp.overrideMimeType) 
      xhttp.overrideMimeType('text/xml') 


     xhttp.open("GET","captions_7.xml",false); 
     xhttp.send(); 
     xmlDoc=xhttp.responseXML; 
     if(xmlDoc) 
     { 
      document.write("ok"); 
      //in ie ok prints 

     } 
     else 
     { 
      document.write("failed"); 
     } 

     elements = xmlDoc.getElementsByTagName("p"); 
     length = elements.length; 

     for (var i=0; i<length ; i++) 
     { 
      //caption text 
      document.write(xmlDoc.getElementsByTagName("p")[i].childNodes[0].nodeValue + "<br />"); 
      //start time 
      document.write(xmlDoc.getElementsByTagName("p")[i].getAttribute("begin")+ "<br />"); 
      //end time 
      document.write(xmlDoc.getElementsByTagName("p")[i].getAttribute("end")+ "<br />"); 
     } 


    </script> 

</body> 
</html> 

在IE8中,該文件的唯一輸出是OK。在Firefox,Opera和Chrome中,顯示XML文件的內容。我在驗證器中檢查了XML文件,並且報告沒有錯誤,所以我不認爲這是問題所在。我真的很感激,如果有人知道這個解決方案或有什麼我可以嘗試的建議。

在情況下,它是很重要的,這是創建XML文件中的函數:我很新的這一切

function createXML($referenceId){ 
header('Content-type: text/xml'); 
$content_id = $referenceId; 
$XMLStart="<tt xml:lang=\"en\"><head><layout/></head><body><div xml:id=\"captions\">"; 
$XMLEnd = "</div></body></tt>"; 

$text; 


$captionQuery = "SELECT caption_text, start_time, end_time FROM captions WHERE content_id = $content_id ORDER BY start_time ASC;"; 

$captionResult = mysql_query($captionQuery); 


if(mysql_num_rows($captionResult)){ 

    while($row = mysql_fetch_array($captionResult)){ 


     $text.="<p begin=\"".$row[start_time]."\" end=\"".$row[end_time]."\">".$row[caption_text]."</p>"; 

     } 
}//end if 

$XMLString = $XMLStart.$text.$XMLEnd; 

$captionsFile="captions_".$content_id.".xml"; 
$captionsFileHandle = fopen($captionsFile, w) or die("can't open file"); 
fwrite($captionsFileHandle, $XMLString); 
fclose($captionsFileHandle); 
return $captionsFile; 

} 

所以道歉,如果這是個很愚蠢的問題。我認爲這一定每天要做好幾千次,但我不明白我能做些什麼來解決它。

+0

快速提示:您是否在用於提供xml的php腳本之前和之後檢查了空白字符?不會使發送的xml無效,但會阻止發送標頭的機會 – Eineki 2011-05-04 18:11:48

+0

IE非常積極地緩存GET請求。除非添加時間戳或查詢字符串唯一或使用POST,否則IE很可能不會返回更新的數據。 – 2011-05-04 19:17:31

回答

0

我強烈建議使用jQuery的AJAX函數;它是跨瀏覽器兼容的,所以它應該有助於解決問題。

+0

@ Eineki - 感謝您的提示,我會考慮這樣做。 @tandu - 我不知道如何去做,但我會看到我能找到的 - 謝謝你的迴應。 – YodaWren 2011-05-04 20:18:31

+0

當我在使用這個問題時,遇到了幾個關於jQuery的參考,但是我從來沒有用過它,也不知道它的任何內容。我有點壓力要將它排序,因爲它是一所大學但我會考慮是否能快速學習。非常感謝回覆。 – YodaWren 2011-05-04 20:23:15

+0

沒問題; jQuery幾乎太簡單了。只需下載JS源代碼,將其附加到您的文檔中;然後使用基本的jQuery .ajax函數來運行它。我認爲它只有3-4行代碼。 – 2011-05-04 20:45:38

0

你的PHP函數是這樣做的:創建一個xml文件(一個實際的文件),它寫入磁盤。返回該文件的名稱。

你需要做的是:建立所有要發送到客戶端的XML字符串,回聲該字符串

所以:

刪除:

$captionsFile="captions_".$content_id.".xml"; 
$captionsFileHandle = fopen($captionsFile, w) or die("can't open file"); 
fwrite($captionsFileHandle, $XMLString); 
fclose($captionsFileHandle); 
return $captionsFile; 

而更換它與

echo $XMLString; 

這個問題可能與您是否使用jque無關RY。

+0

感謝您的回覆。我不能這樣做,因爲我最終要做的是每次輸出一個xml元素,以響應來自視頻播放器的時間事件 - 這裏的代碼只是我編寫的測試代碼,因爲它比測試更快整個應用。對不起,這是我的不好,我應該在我的問題上更清楚。再次感謝。 – YodaWren 2011-05-04 21:46:29