2010-09-23 97 views
1

我對Ajax很新穎。我試圖把一個XML文件的某些特定部分成一個div我的網頁上,並在最近每個瀏覽器下面的作品,除了IE:在IE瀏覽器中出現Ajax錯誤「undefined」

var xhr = false; 
//Executed to request content from the server 
function setContent(){ 
    if(window.XMLHttpRequest){ 
     xhr = new XMLHttpRequest(); 
    } else { 
     if(window.ActiveXObject){ 
      xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    } 
    xhr.onreadystatechange = showContent; 
    xhr.open("GET", "ajax/art.xml", true); 
    xhr.send(null); 
} 
//Executed to set the appropriate text once the server has gathered the data 
function showContent(){ 
    if(xhr.readyState == 4){ 
     if(xhr.status == 200 || window.location.href.indexOf("http") == -1){ 
      var newData = xhr.responseXML.getElementsByTagName(curPage).textContent; 
     } 
     var textBox = document.getElementById("textBox"); 
     textBox.innerHTML = newData; 
    } 
} 

(curPage的值在代碼的其他地方設置與似乎有正確的值) 當我在服務器上的IE中執行此代碼時,我在textBox Div中獲取單詞「undefined」,而不是從XML文檔中獲取內容。我該如何解決這個問題?

在此先感謝<> <


感謝bobince,但似乎沒有任何工作。

這是關於textContent的一個有趣的註釋。我想:

if(xhr.responseXML.getElementsByTagName(allPages[curPage])[curStage].textContent != undefined){ 
    var newText = xhr.responseXML.getElementsByTagName(curPage)[curStage].textContent; 
} else { 
    var newText = xhr.responseXML.getElementsByTagName(curPage)[curStage].innerText 
    } 
} 

以來的innerText應該在除了FF和的textContent每一個瀏覽器,除了IE瀏覽器每次應該工作工作,但我仍然得到「未定義」在IE中。此外,如果我只是使用innerText並忘記了FF兼容性,那麼在每個瀏覽器中,我都會得到「undefined」,而不僅僅是IE。

不知道如何解決這個問題?

這裏的直播現場是否有幫助: www.tcmulder.com/art

(呵呵,注意我用(curPage)curStage],固定第一您注意到的問題)

+0

你有沒有考慮過使用像[jQuery](http://jquery.com/)這樣的JS框架?它會讓你的生活變得更輕鬆。 – NullUserException 2010-09-23 17:36:47

+0

我試圖在本網站上展示我的JavaScript手動編碼技巧。我沒有用jQuery重建這部分,但我想避免在最終的網站。偉大的框架,但:謝謝你的提示。 – tcmulder 2010-09-24 20:23:45

+0

我們是否有可能清理這個問題?對於已發佈爲完整答案而不是原始問題的評論或補充的答案,有回覆。 – 2010-09-27 14:05:46

回答

0
getElementsByTagName(curPage).textContent 

不應該在任何瀏覽器中工作。 getElementsByTagName返回元素列表,而不是單個元素。 A NodeList沒有textContent屬性。

無論如何,IE不支持DOM Level 3 Core屬性textContent。如果你相信有裏面的元素只有一個文本節點,你可以使用閱讀內容:

var el= xhr.responseXML.getElementsByTagName(curPage)[0]; 
var text= el.firstChild.data; 

如果元素可能是空的,你可以檢查該(el.firstChild!==null);如果存在混合的文本和元素內容,則需要編寫一個模擬textContent的文本提取器函數。

0

切換您的初始條件,首先檢查MS特定對象,然後檢查XMLHTTPRequest。

以後版本的IE「支持」XMLHttpRequest但它不起作用。如果你切換你的條件,你的代碼應該工作。

function setContent(){ 
    if(window.ActiveXObject){ 
     xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else { 
     if(window.XMLHttpRequest){ 
      xhr = new XMLHttpRequest(); 
     } 
    } 
    xhr.onreadystatechange = showContent; 
    xhr.open("GET", "ajax/art.xml", true); 
    xhr.send(null); 
} 
+0

謝謝,讓我測試一下。 – tcmulder 2010-09-24 20:52:14

+0

仍然「未定義」,但我將「切換條件」留在那裏,只是爲了在我工作時安全。 – tcmulder 2010-09-24 21:09:13

0

感謝您的幫助;我已經沒有時間在這個網站上,所以我不得不使用jQuery。

function setContent(){ 
$.ajax({ 
    type: "GET", 
    url: "ajax/art.xml", 
    dataType: "xml", 
    success: function(xml){ 
     var curData = curPage + ":eq(" + [curStage] + ")"; 
     var theText = $(xml).find(curData).text(); 
     $("#textBox span").replaceWith("<span>" + theText + "</span>"); 
     ajaxReady = true; 
    } 
    }); 
} 
相關問題