2016-10-11 62 views
1

我該如何去獲取多個XML文件?我試圖創建一個數組,但只打開最後一個文件,據我所知它xmlhttp.open應該取消任何以前的發送。我嘗試修改this這是我能找到的最接近的東西,但是我的JavaScript知識有點侷限於適應它。xmlhttp.open多個XML文件

這是我用來獲取一個XML文件的基本代碼。

if (window.XMLHttpRequest) 
{ xmlhttp=new XMLHttpRequest(); 
} 

xmlhttp.open("GET","myfile.xml",false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 

var x=xmlDoc.getElementsByTagName("TAGNAME"); 
for (i=0;i<x.length;i++) 
{ // Further parsing 
} 

也可以在我的循環中顯示解析的內容來自哪個文件?

+0

是,它「將myfile.xml」 –

+1

來'我試圖創建一個數組,但只打開最後file' - 怎麼樣張貼的代碼,我們就可以告訴你哪裏出了問題 - 也許有人會告訴你如何做到這一點,而不需要重用(不推薦使用)同步XHR請求! –

+0

請勿使用async false。相反,如果(xmlhttp.readyState == 4 && xmlhttp.status == 200)parseXml(xmlhttp.responseXM),則將數組計數器的增量和下一次調用添加到'xmlhttp.onreadystatechange = function(){ ; cnt ++; callAjax(); } }其中callAjax()是你函數的名字 – mplungjan

回答

1

試試這個:

var arr = ["file1.xml", "file2.xml"], 
    cnt = 0, xhr = new XMLHttpRequest(), method = "GET"; 

function formatXml(file, xmlDoc) { 
    var x=xmlDoc.getElementsByTagName("TAGNAME"); 
    console.log(file,x); 
} 

function getXml() { 
    xhr.open(method, arr[cnt], true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { 
     formatXml(arr[cnt], xhr.responseText); 
     cnt++; 
     if (cnt < arr.length) getXml(); // call again 
    } 
    }; 
    xhr.send(); 
} 
getXml(); // start it 
+0

爲什麼要等第一個加載加載第二個?並行請求是可行的 – Kaiido

+0

我會猶豫做並行請求。它可以很難找到服務器,如果有錯誤,請求應該停止,延遲或以某種方式處理。我沒有在我的例子中加入這樣的代碼,因爲沒有足夠的信息從OP那裏走。 – mplungjan

+0

感謝您的幫助。試過你的解決方案,但它只是空的。沒有錯誤,控制檯中沒有任何錯誤。 [做了一個模擬示例](http://pastebin.com/44imfiLd)我如何嘗試它。還使用我的[原始代碼](http://pastebin.com/qnVWdTBK)進行測試,並且工作正常。 – yayheartbeat