2016-10-11 6 views
1

複数のXMLファイルを取得するにはどうすればよいですか?私は配列を作成しようとしましたが、最後のファイルしか開きません。xmlhttp.openは以前の送信をキャンセルするはずです。私は見つけることができる最も近いものだったthisを修正しようとしましたが、私のJavaScriptの知識はそれを適応させるために少し制限があります。xmlhttp.open複数のXMLファイル

これは1つの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

はい、それは '私は配列を作成しようとしたが、それが唯一の最後のfile'を開き –

+1

「myfile.xml」から来た - どのようにコードを掲示について、私たちは、その後することができます何が間違っているのかを教えてください。また、(非難される)同期XHRリクエストに頼らなくても、これをどうやって行うことができるかもしれません! –

+0

async falseを使用しないでください。代わりに、配列カウンタのインクリメントと 'xmlhttp.onreadystatechange = function(){(xmlhttp.readyState == 4 && xmlhttp.status == 200){ if 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

なぜ最初のものが読み込まれて2番目のものが読み込まれるのを待つのですか?パラレルリクエストが可能です – Kaiido

+0

私はパラレルリクエストをするのをためらっています。サーバーにかなりの負荷がかかる可能性があります。エラーがある場合は、要求を停止、遅延、または何らかの方法で処理する必要があります。私はそのようなコードを私の例に追加していない.OPからの情報が十分ではないからだ。 – mplungjan

+0

助けてくれてありがとう。あなたの解決策を試しましたが、それは空になるだけです。エラーはなく、コンソールには何も表示されません。 [試作品を作った](http://pastebin.com/44imfiLd)どうやって試してみましたか?私の[オリジナルコード](http://pastebin.com/qnVWdTBK)を使ってもテストされています。 – yayheartbeat

関連する問題