首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取属性'getElementsByTagName‘的null

无法读取属性'getElementsByTagName‘的null
EN

Stack Overflow用户
提问于 2015-05-08 00:15:04
回答 1查看 7.8K关注 0票数 1

请原谅我在这方面的困惑,我对javascript和诸如此类的东西并不熟悉。如果我的代码是垃圾,也请原谅我,因为它是我找到的例子的组合,也是我想出来的东西(但没有搞清楚)!

我试图在开放广播软件中运行这个html文件:

代码语言:javascript
复制
<html>
<head>
    <link rel="stylesheet" href="css/stylesheet_twitter1.css" type="text/css" charset="utf-8">
    <script src="js/jquery-2.0.2.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/jstween-1.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/countries.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">

            var timestampOld;
            var timestamp;
            var mText4;

            var xmlDoc;

            var xhr = new XMLHttpRequest();

            var animating = false;
            var doUpdate = false;

            function init() {

                xhr.overrideMimeType('text/xml');

                var timeout = this.window.setInterval(function() {
                    pollHandler();
                }, 250);

                $('#mText4').html('');
                $('#board').tween({
                   top:{
                      start: '80',
                      stop: '0',
                      units: 'px',
                      time: 0,
                      duration: 0.8,
                      effect:'easeOut'
                   }
                });

                $.play();
            }



    </script>
</head>
<body onLoad="init()">

    <script type="text/javascript">
            function pollHandler()
            {
              loadData();
              if (timestamp != timestampOld) {
                  doUpdate = true;
              }
              if (!animating && doUpdate) {
                  updateBoard();
              }
            }

            function loadData() {
                xhr.open('GET', 'streamcontrol.xml');
                xhr.send();
                xhr.onreadystatechange = function(){
                        xmlDoc = xhr.responseXML;


                        mText4 = getValueFromTag(xmlDoc,'mText4');                      
                        timestampOld = timestamp;
                        timestamp = getValueFromTag(xmlDoc,'timestamp');

                }
            }

            function updateBoard() {


                if ($('#mText4').html() != mText4) {
                    animating = true;
                    $('#mText4').tween({
                        opacity: {
                          start: 100,
                          stop: 0,
                          time: 0,
                          duration: 0.5,
                          effect: 'easeIn'
                        },
                        onStop: function(){
                            $('#mText4').html(mText4);
                        }
                    });

                    $('#mText4').tween({
                        opacity: {
                          start: 0,
                          stop: 100,
                          time: 0.5,
                          duration: 0.5,
                          effect: 'easeOut'
                        },
                        onStop: function(){
                            animating = false;
                        }
                    });
                }

                $.play();

                doUpdate = false;
            }

            function getValueFromTag (xmlDoc,tag) {
                if (xmlDoc.getElementsByTagName(tag).length != 0 ) {
                    if (xmlDoc.getElementsByTagName(tag)[0].childNodes.length == 0) {
                            return '';
                        } else {
                            return xmlDoc.getElementsByTagName(tag)[0].childNodes[0].nodeValue;
                    }
                } else {
                    return '';
                }
            }
            </script>
    <div id="board">
        <div id="mText4"></div>
    </div>
</body>
</html>

它工作得很好,但是在运行了几个小时(和另外两个html文件)之后,这个软件就会崩溃。这导致我查看了它创建的日志文件,并且多次看到以下内容:

代码语言:javascript
复制
Uncaught TypeError: Cannot read property 'getElementsByTagName' of null @http://absolute/D:/obs%20stuff/browserfiles/Twitter1.html334

所以我在Firefox中运行了它,然后它抛出了以下错误(同样,很多错误):

代码语言:javascript
复制
TypeError: xmlDoc is null

我确信streamcontrol.xml不是空的。我觉得这些错误给我指明了一个很好的方向,但经过两天的集体10+时间,我在不同的线程上看到了不同的东西,我不知所措。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-08 01:52:08

onreadystatechange不只是在您的请求成功完成时触发。您必须检查就绪状态是否已完成,并且状态在处理程序中是否成功。

有关一些使用细节,请查看这里

通常,您需要检查xhr.readystate === 4以知道它有响应,然后检查状态(xhr.status === 200表示成功的响应)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30113735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档