这是一个很难用一句话概括的问题,所以如果我杀了它,我很抱歉。
我最近启动了一个站点,该站点已在我的本地 Web 服务器上在所有我想要的浏览器平台上进行了广泛的测试,包括 IE8(IE8 标准模式,XHTML Strict)。在该站点在专用 Web 服务器上上线之前,我完全没有遇到任何问题。
该网站jQuery.get()
在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()
如果我通过or分配我的 AJAX 内容.innerHTML
,它会立即被截断。
Sooo.... WTF?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);
});
});