mootoolsを使用してIE8でXMLを受信する方法
-
05-07-2019 - |
質問
AJAXリクエストを頻繁に使用するWebを実行しています XMLサービス。実際、私のウェブはほとんどのフロントエンドです サーバーは一切なく、AJAXを使用して通信します バックエンド。
すべてがうまくいった(Ubuntu 9.04で開発およびテストした) およびブラウザとしてのFirefox 3.0)。 ある日、IE8でWebがどのように動作するかを確認することにしました... 恐怖!
Firefoxで見事に機能したように、何も機能していませんでした。 具体的には、Request.HTMLが機能していませんでした。 私が言ったように、私のウェブはそれに大きく依存していたので、何も機能しませんでした。
何かを実行しようとして1日過ごしましたが、運がありませんでした。 私が着いた唯一の結論は、XMLが 誤って解析された (私は間違っていると思います)。コードを見てみましょう:
var req = new Request.HTML({
url: 'service/Catalog.groovy',
onSuccess: function(responseTree, responseElements) {
var catz = responseElements.filter('category');
catz.each(function(cat){
// cat = $(cat);
var cat_id = cat.get('id');
var subcategory = cat.getElement('subcategory');
alert(cat_id);
alert(cat.get('html'));
alert(subcategory.get('html'));
}
},
onFailure: function(){...}
});
たとえば、そのコード。 Firefoxでは、完全に機能しました。 ID(たとえば、7)を警告し、 次に、カテゴリ要素の内容が表示されました。例:
<subcategory id='1'>
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
</subcategory>
そして、この場合、いくつかの内部要素の内容を示しました:
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
IE8では、最初のアラートは正常に機能しました(アラート7) しかし、次のアラート(alert(cat.get( 'html'));)は空の文字列を与えました そして最後は例外を投げました...それはサブカテゴリについて何かを言いました nullになる。
これですべて結論付けたのは、解析される要素 正しく Firefoxでは、IE8ではタグと属性のみがOKでした。 ほかのすべて 完全に間違っていました(実際、欠落しています)。つまり、の内部コンテンツ 全ての 応答の要素が消えた!
使用できるその他の事実:このコード:
alert(cat.get('tag')); resulted in
Firefox: category
IE8: /category <-----------(?)
うーん、他に...
そうそう...上記のコメント行( cat = $(cat);
)は
何か
これを修正しようとしました。 IEが必要としたmootools Docsを読む
明示的に呼び出す
すべてのElement-magicを取得するための要素の $
関数...
何も修正しませんでした。
私はとても必死でした... mootools.js
コードをいじりました
OK、だから... mootool-proの皆さん、この問題を解決するのを手伝うことを望んでいます。 なぜなら、私は本当にIE8で機能するウェブが必要だからです。実際、私は 互換性の問題を忘れるmootools ...
ps:不明な点がある場合は、お問い合わせください!助けていただければ幸いです:D
解決
jQueryを使用する前に、このような同様の問題がありました。問題は、IEでは、着信応答データを Microsoft.XMLDOM
ActiveXオブジェクトで処理する必要があることでした。
一般的な手順は次のとおりです。
-
ActiveXオブジェクトをインスタンス化します。
var oXmlDoc = new ActiveXObject(&quot; Microsoft.XMLDOM&quot;);
-
着信応答データを渡し、ロードします。
oXmlDoc.loadXML(sXmlResponseData);
-
必要に応じて解析します。
完全な解像度を確認できますここ。