【问题标题】:Cannot set property 'innerHTML' of null?无法将属性“innerHTML”设置为 null?
【发布时间】:2014-08-25 15:18:09
【问题描述】:

为什么我会收到错误或“未捕获的类型错误:无法将属性 'innerHTML' 设置为 null?”。 这是我的代码

function ajax()
 {
var pathxml;
var answer;
if (window.XMLHttpRequest) {
  pathxml = new XMLHttpRequest();
}
else
{
    pathxml = new ActiveXObject("Microsoft.XMLHTTP");
}

pathxml.onreadystatechange= function()
{
    if (pathxml.readyState==4 && pathxml.status==200) 
    {
         answer = pathxml.responseText;

    document.getElementById("ans").innerHTML = answer;

    }
 }
 pathxml.open("GET","books/ax",true);
 pathxml.send();
  }

【问题讨论】:

  • 你确定你有一个id为ans的元素吗?
  • 向我们展示您的 HTML 代码。
  • id 为 ans 的元素不存在

标签: javascript


【解决方案1】:

该元素似乎不存在或似乎与任何已知对象都不匹配 - 这就是返回 NULL 的原因。

Null 表示缺乏标识,表示变量不指向任何对象。在 API 中,通常在可以预期对象但没有相关对象的地方检索 null。

似乎是this question..的副本。

我建议您调试此处提到的“ans”..

另一个原因可能是您在构建 DOM 之前运行代码。尝试在 this 帖子中提到的 window.onload 处理程序函数中运行您的代码..

这里有一个指向方法的link 和一个指向全局对象null..的链接。

希望对您有所帮助..

【讨论】:

    【解决方案2】:

    可能 document.getELementById("ans") 没有结果。先调试一下。

    【讨论】:

      【解决方案3】:

      试试这个代码:

      document.getElementById("displayDiv").innerHTML = "EXPIRED";
      
      <span id="displayDiv"></span>
      

      【讨论】:

        【解决方案4】:

        所讨论的可能原因不同,只是想为可能与我遇到相同问题的人添加此内容。

        在我的情况下,我缺少如下所示的关闭 div

           <!DOCTYPE HTML>
           <html>
           <head>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
           <title>Untitled Document</title>
           </head>
           <body>
           <div> //I am an open div
            <div id="hello"></div>
           <script type ="text/javascript">
               what();
               function what(){
                  document.getElementById('hello').innerHTML = 'hi';
               };
           </script>
           </body>
           </html>
        

        缺少关闭的 div 可能会导致从子级到父级或父级到子级的横向混乱,从而在您尝试访问 DOM 中的元素时导致错误

        您可能还需要查看上一个问题,这里有很多不同的可能原因以及如何解决它们:Cannot set property 'innerHTML' of null

        【讨论】: