【问题标题】:Odd Contradictory Error奇数矛盾错误
【发布时间】:2016-08-30 22:06:14
【问题描述】:

我有一个带有 ruby​​ 的 heroku 网站,但我的问题尤其是一页。该页面的问题是javascript。该页面上也有ajax。这是我的页面:

<!DOCTYPE html>
    <html>
        <head>
            <script>
            var refreshDelay = 5000000;
            function createRequestObject() {
                var ro;
                if(navigator.appName == "Microsoft Internet Explorer"){
                    ro = new ActiveXObject("Microsoft.XMLHTTP");
                }else{
                    ro = new XMLHttpRequest();
                }
                return ro;
            }
            var http = createRequestObject();
            function sndReq() {
                var newParent = document.getElementById('2');
                var oldParent = document.getElementById('target');

                while (document.getElementById('target').childNodes.length > 0) {
                    newParent.appendChild(document.getElementById('target').childNodes[0]);
                }
                http.open('post', '/chatContent?n=<%=@name%>');
                http.onreadystatechange = handleResponse;
                http.send(null);
            }
            function handleResponse() {
                var newParent = document.getElementById('2');
                var oldParent = document.getElementById('target');

                while (document.getElementById('target').childNodes.length > 0) {
                    newParent.appendChild(document.getElementById('target').childNodes[0]);
                }
                if(http.readyState == 4){
                    var response = http.responseText;
                    document.getElementById('target').innerHTML = response;
                    setTimeout(sndReq(), refreshDelay);
                }
            }
            setTimeout(sndReq(), refreshDelay);
            </script>
            <script>
            scrollDown = function() {
               document.body.scrollTop = document.body.scrollHeight;
            }
            </script>
        </head>
        <body onload='scrollDown()'>
            <div id='2'>
            </div>
            <div id='target'>
                <%=@chat%> <!-- @chat is a variable from my ruby file -->
            </div>
            <form action="/addChat?n=<%=@name%>" method='post'>
                <input name='nchat' type='text' autofill='no' style='width:100%;height:10em;vertical-align:top'>
                <input type='submit'>
            </form>
            <a href='/home'>Go home!</a>
        </body>
    </html>

当我加载页面时,它在控制台中出现了关于第 24 行的错误:

Uncaught TypeError: Cannot read property 'childNodes' of null

但是当我进入控制台document.getElementById('target').childNodes.length 时,它给了我很多节点(它动态变化)。怎么回事??

您想看到任何额外的东西来回答这个问题,我会尽量及时发布。只要问!

【问题讨论】:

    标签: javascript ajax


    【解决方案1】:

    您正在调用setTimeout(sndReq(), refreshDelay);,它将立即执行sndReq(),因为您将函数传递给setTimeout

    由于您的 sndReq() 在您的脑海中,因此 HTML 尚未完全加载,因此您收到选择器错误,因为该元素不存在(尚)。

    您可以将setTimeout(sndReq(), refreshDelay); 更改为setTimeout(sndReq, refreshDelay); 以将函数引用传递给setTimeout,这样sndReq() 就不会立即触发。

    参考:setTimeout

    【讨论】:

    • 这解决了我的问题,但现在我的 ajax 无法正常工作。我应该将它添加到这个问题还是创建一个新问题?
    • 我喜欢解决问题...我可以整天都在做,但是这个网站上的人真的想把问题分开。另外,新问题 = 给您的新积分。
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多