IE + jQuery + Ajax + XHTML:HTML在.html()或.innerHTML之后被修剪

这是一个很简单的问题,所以我很抱歉如果我杀了它。

我最近启动了一个网站,该网站已经在我所有的浏览器平台(包括IE8(IE8标准模式,XHTML Strict))上的本地网络服务器上进行了广泛的测试。 直到该网站在专用网络服务器上运行,我才发现没有任何问题。

该网站使用jQuery.get() change事件中的表单input元素,其中响应被嫁接到常见的<div id="results"></div>

尽管我已经阅读过关于IE和XMLHTTPRequest的缓存问题,但我的问题似乎发生在我的ajax回调开始执行之后。 我的回调(通过.get() / .load() - 我试过)接收由我的服务器返回的HTML片段。 在任何浏览器中测试返回的内容都能准确显示出我期望的内容。

然而,只要我将HTML片段放入#results的DOM树中,IE实际上会将我的标记中的前7或8个开始标记(以及大多数标记的子标记) #results掉。 这是非常奇怪的。 我通过jQuery('#results')[0].innerHTML = content设置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().innerHTML分配我的AJAX内容,它会立即被截断。

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);
    });
});

我有类似的问题发生,附加的HTML代码的一部分被剪切,但如果我创建了内部html的警报,或者强制滚动,它就出现了。

然后我看到一篇文章似乎表明IE8没有正确重画窗格。 http://ajaxian.com/archives/forcing-a-ui-redraw-from-javascript

我设法让它工作的唯一方法是向它添加一个类,等待,然后删除该类。 如果我没有等,它似乎跳过执行。

function Redraw(element)
{
 if ($.browser.msie)
 {
  element.addClass("invisible");
  setTimeout(function(){
    element.removeClass("invisible");
   },1);
 }
}

如果你删除rel="stats"会发生什么情况?

根据MSDN的说法, rel属性不允许有stats


我可以证实这个问题。 我对原始提交者产生了类似的AJAX响应。 一些初始信息,然后通过数据循环来创建8个不同div的内容。 运行页面时,它会执行加载,但IE只会显示一些数据。 一个小改变解决了这个问题

我在每个div的页面上都有一个span(用于一组视频标记),这样如果文本太长,我可以截短文本,并将title属性的span用作hovertip。 如果标签跨度以这种方式格式化:

<div>Tags: <span title="Miller, Jackson, Brown">Miller, Jackson...</div>

它不起作用,而:

<div>Tags: Miller, Jackson, Brown</div>

工作得很好。 当然,我注意到我的错误,因为没有跨度结束标记。 解决这个问题也很有效,但我注意到的重要一点是IE似乎对AJAX格式错误,或者更确切地说,AHAH格式错误不能容忍。

在看过之后,我会保证返回字符串中存在一些稍微不正确的HTML。 我有完全相同的错误,由JavaScript返回的信息片断,你做了,并纠正错误修复了我。

链接地址: http://www.djcxy.com/p/88771.html

上一篇: IE+jQuery+Ajax+XHTML: HTML getting clipped after .html() or .innerHTML

下一篇: Tick symbol in HTML/XHTML