2012-06-29 17 views
2

我試圖在每次單擊鏈接時根據它的href加載不同的xml文件。 我在頭下面:使用JavaScript解析XML文件中的變量點擊

JAVASCRIPT

window.onload=function() { 
loadXMLDoc("papers.xml"); // loads the default xml file so that page is not empty 
} 

function scanForXML(){ 
var extLinks=document.getElementById('results_list').getElementsByTagName('a'); 
for (i=0; i<extLinks.length; i++) { 
extLinks[i].onclick=function getName() 
{ 
var fileName=this.getAttribute('href'); 
loadXMLDoc(fileName); 
return false; 
} 
} 
} 

HTML

<ol id="results_list"> 
<li> <a class="tooltip" href="paper2.xml"> Teaching with Tablet PC's </a></li> 
<li> <a href="paper3.xml" class="tooltip"> Tablet PC’s as Instructional Tools </a></li> 
</ol> 

onclick事件的作品,我得到href值,但新XMLFILE不會被加載。 任何想法爲什麼?

ps:no jquery plz,不能使用它。想更好地學習基本的JavaScript

的JavaScript load碼 - 順便說一下它不會在Chrome和Opera的工作 - 但工程的默認XML文件中的Safari瀏覽器被加載 代碼:

function loadXMLDoc(dname) 
{ 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.open("GET",dname,false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 
} 

謝謝! K

+0

可能的重複[不能在jQuery的.ajax方法中使用返回的數據,除了函數本身](http://stackoverflow.com/questions/11247066/cant-use-returned-data-in-ajax- jquery-anywhere-but-the-function-itse) –

回答

0

這是因爲請求是異步的:當loadXMLDoc函數返回時沒有響應。

通常的解決辦法是這樣的:

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState === 4) { 
     if (xmlhttp.status === 200) { 
          // use xmlhttp.responseXML; 
        } 
      } 
    } 
    xmlhttp.open("GET",dname,false); 
    xmlhttp.send(); 

的主要區別是,你不使用loadXMLDoc函數的返回,但要求它做一些它已經獲取的XML之後。

另一個解決方案是使用jquery's ajax function

編輯強制同步請求:我把它標記爲重複的,因爲它是一個常見的問題,但我希望這個具體的回答會幫助你。

+0

你好, 我理解上面的邏輯,但作爲js的新手,不知道如何將這個在我的代碼中。這不起作用: 函數loadXMLDoc(DNAME) { \t 如果(window.XMLHttpRequest) { XMLHTTP =新的XMLHttpRequest(); } 別的 { XMLHTTP =新的ActiveXObject( 「Microsoft.XMLHTTP」); } xmlhttp.onreadystatechange =函數(){ 如果(xmlhttp.readyState === 4){ 如果(xmlhttp.status === 200){ \t \t \t \t \t \t xmlDoc中= XMLHTTP。 responseXML的; } } } xmlhttp.open(「GET」,dname,false); xmlhttp。發送(); } – kate

+0

請幫忙嗎?我不知道如何使用異步請求...對於初學者xmlhttp.open(「GET」,dname,false)表示異步錯誤,是正確的嗎? – kate