2

私の質問は、Microsoft (Trident) ブラウザーに完全に焦点を当てています。reponseXML と loadXML の違いは何ですか? 次の 2 つのコードが表示されます。

方法 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.xml を次のように考えてみましょう。

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

これで、xmlObj.getElementsByTagName('a').length は 2 番目のメソッド (ajax 呼び出し) に対して 2 を返し、最初のメソッドに対して 0 を返します。

4

1 に答える 1

1

これら 2 つの API の使用で発生する可能性がある唯一の違いは、扱う MSXML のバージョンです。一方では MSXML2 を指定し、他方では指定しないためです。一般に、多くの XPath または XSLT を実行していない限り、顕著な効果は見られないはずです。

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

とはいえ、同期であるため、リクエストが完了すると返さonreadystatechangedれるため、まったく使用する必要がないため、次の行を取得するだけで済みます。send()request.responseXML

また、無効な XML について話したので、両方のメソッドのエラー ケースは同じであることにも言及しておく必要があります。どちらも無効な XML の例外をスローしません。代わりにゼロ以外のxmlObj.parseError.errorCode値を取得します。

于 2012-04-23T22:24:07.987 に答える