2012-04-21 11 views
2

私の質問は、Microsoft(トライデント)ブラウザに完全に焦点を当てています。 reponseXMLとloadXMLの違いは何ですか? 2個のコードが示されている以下:javascriptのreponseXMLとloadXMLの違いは何ですか?

方法1:

var xmlObj = new ActiveXObject("Msxml2.DOMDocument"); 
    xmlObj.async = false; 
    xmlObj.load('/files/xml/books.xml'); 

方法2:上記のスニペットで

var request = new ActiveXObject("Microsoft.XMLHTTP"); 
request.open("GET", "files/xml/books.xml", false); 
request.onreadystatechange = function() { var xmlObj = request.responseXML; }; 
request.send(null); 

、両方の場合において可変xmlObjは、XMLドキュメントです。しかし、それらの間に違いはありますか?以前のスニペットを使用してajax呼び出しなしで何かをしようとしていたので、xmlObjにxmlファイルの内容が期待どおりになっていても動作しませんでした。親切に助けてください。ありがとう。

編集:

私は違いを見つけました。

<books> 
    <book> 
     <a/><b/> 
    </book> 
    <book> 
     <a/><b/> 
    </book> 
</books> 

今xmlObj.getElementsByTagName(「A」)の長さは、第二の方法(AJAX呼び出し)のために2を返し、それが第一の方法の場合は0を返します。私たちはのBooks.xmlがある考えてみましょう。

+0

なぜAjaxコールなしで何かしたいですか? –

+0

ajax呼び出しなしでサーバー側XMLをロードしたい。 Msxml.DomDocumentのactiveXオブジェクトのみを使用する必要があります。 –

+1

@ RanjanSarma動作しなかったXML文書で何をしようとしていましたか? –

答えて

1

これらの2つのAPIを使用する際に遭遇する唯一の違いは、あるケースではMSXML2を指定していても、別のケースでは指定していないため、扱っているMSXMLのバージョンです。一般に、XPathやXSLTを大量に実行していない限り、目に見える効果は見られません。

しかし、これらの特定のコードスニペットは、かなり異なっています。 send()ウェイ2で同期実行されるように指定していますが、onreadystatechangedイベントは複数回発生するので、responseXMLを取得する前にrequest.readyState == 4もチェックする必要があります。

それはあなたが要求はそうあなたがちょうど次の行にrequest.responseXMLをつかむ可能性が完了するとsend()のみ返されますように、すべてのonreadystatechangedを使用する必要はありません同期だから、と述べました。

無効なXMLについて話しているので、どちらの方法でもエラーの場合は同じです。どちらも無効なXMLの例外をスローしません。代わりに0以外のxmlObj.parseError.errorCode値を取得します。

+0

できるだけ早くできるだけ早く コードを理解できるように、スニペットをできるだけ小さくしました。 –

関連する問題