これは短い文章にまとめるのが非常に難しい問題なので、殺してしまったら申し訳ありません。
私は最近、IE8 (IE8 標準モード、XHTML Strict) を含むすべての希望するブラウザー プラットフォーム上のローカル Web サーバーで広範囲にテストされたサイトを立ち上げました。サイトが専用の Web サーバーで公開されるまで、まったく問題はありませんでした。
このサイトでは、フォームの要素にjQuery.get()
on を使用します。ここで、応答は共通の に移植されます。change
input
<div id="results"></div>
私が IE と XMLHTTPRequest で読んだキャッシングの問題にもかかわらず、私の問題は、私の ajax コールバックが実行を開始した後に発生するようです。私のコールバック ( .get()
/経由で提供さ.load()
れます。両方を試しました) は、サーバーから返された HTML フラグメントを受け取ります。返されたコンテンツを任意のブラウザでテストすると、期待どおりのコンテンツが明らかになります。
ただし、HTML フラグメントを の DOM ツリーに配置するとすぐに#results
、IE は実際にマークアップから最初の 7 つまたは 8 つの開始タグを (それらのタグのほとんどの子と共に) 切り取ります。それはひどく奇妙です。を介して HTML コンテンツを設定することで、サイトの別の領域で修正しましたjQuery('#results')[0].innerHTML = content
が、今回はサイコロはありません。
応答例:
<div>
<a href="#">some link</a>
<span>stuff, blah blah</span>
<a href="#">another link</a>
<ul>
<li id="item-2342">
<img src="#" />
<div class="info">
<h6> ..title.. </h6>
<a href="#">View</a>
<span rel="stats"> ..statistics.. </span>
</div>
</li>
<!-- ... and so on in a loop over items to create more <li> items ... -->
</ul>
</div>
文字通り、その開始タグまでのすべて<span rel="stats">
が切り捨てられます。その結果、IE は、返された AJAX コンテンツをテキスト ノードで始まるかのように表示します..statistics.. </span>
。(以下のコメントの提案で を削除してrel="stats"
、代わりに CSS クラスに変更しようとしましたが、同じ結果が発生します。)
ブラウザの URL フィールドから AJAX の URL を直接リクエストすると、返されるコンテンツは完璧です。
alert()
返された AJAX コンテンツを表示するために使用すれば、完璧です。
.html()
またはを介して AJAX コンテンツを割り当てると、.innerHTML
すぐに切り捨てられます。
すっごく....なんてこと?IE の (安っぽい) デバッガーは、スクリプト エラーやその性質のものを何も表示しません。これまでにこの種の問題に対処したことのある人はいますか? 繰り返しますが、私の開発サーバー (127.0.0.1) では IE に問題はなく、同じ「モード」(IE8 標準) とすべてを使用しているようです。
編集:AJAXルックアップを強化するJavascriptは次のとおりです。
jQuery('.ajax-panel').live('load', function(event, request_string){
var panel = jQuery(this).stop(true).fadeTo(100, 0.2).addClass('loading');
var form = jQuery(panel.attr('rel'));
jQuery.get(form.attr('action'), request_string ? request_string : form.serialize(), function(response){
// WTF?
// panel[0].innerHTML = response;
panel.empty().append(response);
// Carry on.
panel.removeClass('loading').stop(true).fadeTo(100, 1);
});
});