【问题标题】:Javascript AJAX function not working in IE?Javascript AJAX 函数在 IE 中不起作用?
【发布时间】:2026-01-23 22:25:01
【问题描述】:

我有这个代码:

function render_message(id)
{
var xmlHttp;
  xmlHttp=new XMLHttpRequest();  
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
        document.getElementById('message').innerHTML=xmlHttp.responseText;
        document.getElementById('message').style.display='';
        }
    }
    var url="include/javascript/message.php";
    url=url+"?q="+id;
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

由于某种原因,它在 IE 中不起作用,并且在“document.getElementById('message').innerHTML=xmlHttp.responseText;”这一行报告了错误带有“未知的运行时错误”。

谁能帮忙?

编辑:添加到 div 的代码是有效代码等。

下面是回复:

<div style="margin-left:auto;margin-right:auto;width:400px;">
    <img src="/forum/img/avatars/2.gif" width="90" height="89" style="float:left;">
    <div style="margin-left:100px;">
        <span style="font-size:16pt;">Sam152</a></span><br>
        <span style="font-size:10pt;text-transform:uppercase;font-weight:bold;">From Sam152</span><br>
        <span style="font-size:10pt;font-weight:bold;">Recieved April 17, 2009, 9:44 am</span><br>
        <br><br>

    </div>
</div>
<div style="margin-left:auto;margin-right:auto;width:400px;">
        asd</div>
<div style="margin-left:auto;margin-right:auto;width:400px;text-align:right;padding-top:10px;">
        <span onClick="requestPage('http://www.gametard.com/include/scripts/delete_message.php?id=14');document.getElementById('message14').style.display='none';document.getElementById('message').style.display='none';" class="button">Delete</span>
        <span onClick="document.getElementById('message').style.display='none';" class="button">Close</span>
        <span onClick="document.getElementById('to').value ='Sam152';document.getElementById('to').style.color ='#000';document.getElementById('newmessage').style.display='';" class="button">Reply</span>     

</div>

【问题讨论】:

  • id="message" 的元素长什么样子?
  • 您的代码无效 - 请参阅我的答案

标签: javascript internet-explorer xmlhttprequest


【解决方案1】:

Your issue.

本质上,您正在尝试添加在您添加的上下文中没有意义的 HTML。在没有 ul 的地方添加 li,或者在没有 table 的地方添加行会导致这种事情。

【讨论】:

  • HTML 非常有意义,它是一个嵌套在 div 中的 div。
  • @Sam152:答案是指 id 为“消息”的元素,而不是响应正文本身。
【解决方案2】:

如果结果是无效的 HTML,您可能会收到此错误 - 例如 &lt;a&gt;&lt;a&gt;foo&lt;/a&gt;&lt;/a&gt;&lt;a&gt;&lt;p&gt;foo&lt;/p&gt;&lt;/a&gt;

没有看到更多代码(“消息”是什么类型的元素以及 responseText 是什么)很难说更多。

您的代码无效:

<span style="font-size:16pt;">Sam152</a></span>
                                    ^^^^

【讨论】:

  • 我已经梳理了 HTML,没有发现任何可能导致它的原因。
【解决方案3】:

不确定以下是否适用于您,因为您没有提及您使用的 ie 版本。

只适用于ie7以上

var xmlhttp=new XMLHttpRequest();

在 Internet Explorer 5 和 6 中您必须使用

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

【讨论】:

  • 哦,请记住 new ActiveXObject("Microsoft.XMLHTTP") 并不总是适用于 SSL(尤其是在 IE5 中),因此应避免用于安全应用程序。
  • 还有人关心IE5吗?
【解决方案4】:

相信我:使用 Ajax 框架。

jQuery 或原型或任何其他。

不要自己动手 - 你只是看到了这个问题的跨浏览器冰山一角。

如果您必须自己做,请在收到您的消息之前检查xmlHttp.status。请记住,IE 有时会在此处返回 Windows 错误代码而不是 HTTP 状态,如果错误是连接丢失而不是 HTTP 状态,旧版 FX 会引发异常。

哦,IE6 仍然占网络市场的 30% 和企业市场的 60%,所以@Paul Whelan 的建议也值得一试。

【讨论】:

  • 好建议,我明白你的意思。不过,这仅适用于一个小型应用程序,我的 AJAX 编程到此结束。我将如何实施您的 xmlHttp.status 建议?
  • Google 托管 jQuery,使其非常易于用于小型应用程序 - 我只使用他们的一个。否则,在获取 xmlHttp.status 周围放置一个 try-catch,然后处理除 200 或抛出的异常之外的任何内容。任何超过 505(在 IE 中)的状态都是 Windows 连接错误而不是服务器错误:例如 12002 是连接超时。
  • 我是一个新手 Javascript 程序员,这会修复错误吗?你会在我现有的函数中显示给我吗?
  • IE6 现在实际上下降了 20% 以下。不要与你的帖子争论,只是一个让我内心快乐的小事实。
  • @Sam152 - 恐怕没那么简单。不久前我写了我自己的变种——为了让它在 IE5&6 和 FX1&2 中稳定,花了很长时间才写了几百行 javascript(包括解释所有时髦黑客的 cmets)。