'的getElementsByTagName'从php生成的xml

时间:2017-09-09 13:42:00

标签: javascript php xml xmlhttprequest

所以我为我的工作创造了一些东西。一些XML个文件用于在其他数据库中保存新闻项。为什么我不使用实际的数据库?可能会改变的工作政策原因。

但是现在我生成以下admin.php

<div id="news" style="display:none;">
    <div style="float:left;width:40%;">
    <h1>Regionala Nyheter</h1>
    <table border="0"><tr><td><b>Rubrik: </b></td><td><input id="rntitle" type="text" /></p></td></tr>
    <tr><td></td><td><textarea id="rntext" rows=10 cols=40></textarea></td></tr>
    <tr><td></td><td><input type="button" value="Spara" onclick="editnews(0,-2)" /></td></tr></table>
    <div id="regnews"></div>
    </div>
</div>

...

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
    var rnxhttp = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
    var RNDoc;
    var el_news;
    var el_regnews;
    var numrn = 0;

    rnxhttp.onreadystatechange = function()
    {
        if (rnxhttp.readyState == 4 && rnxhttp.status == 200)
        {
            RNDoc = rnxhttp.responseXML;
            refresh_regnews();
        }
    };

    onload = function()
    {
        el_regnews = document.getElementById("regnews");
        el_news = document.getElementById("news");
        el_news.style.display = "block";
        rnxhttp.open("GET", "regnews.xml", true);
        rnxhttp.send();
    }

    var refresh_regnews = function()
    {
        var inhtext = "";
>>      numrn = RNDoc.getElementsByTagName("entry").length;
        for(var i=0; i<numrn; i++)
        {
            var entry = RNDoc.getElementsByTagName("entry")[i];
            var edate = entry.getElementsByTagName("date")[0].childNodes[0].nodeValue;
            var etitle = entry.getElementsByTagName("title")[0].childNodes[0].nodeValue;
            var etext = entry.getElementsByTagName("text")[0].childNodes[0].nodeValue.split("\n");
            inhtext = inhtext + "<br /><br /><div style='width:90%;border-style:ridge;'>"
            inhtext = inhtext + "<table border='0'><tr><td><b>Rubrik: </b></td><td colspan='2'><input id='cntitle" + i + "' type='text' value='" + etitle + "' /></p></td></tr>";
            inhtext = inhtext + "<tr><td></td><td colspan='2'><textarea id='cntext' rows=10 cols=40>";
            for(var j=1; j<etext.length; j++)
                inhtext = inhtext + etext[j].trim() + "\n";
            inhtext = inhtext + "</textarea></td></tr><tr><td></td>"
            inhtext = inhtext + "<td><input type='button' value='Spara' onclick='editnews(0," + i + ")' /></td><td><input type='button' value='Radera' /></td></tr></table></div>";
        }
        el_regnews.innerHTML = inhtext;
    }

    var editnews = function(newstype,newsindex)
    {
        var newstitle = "";
        var newstext = "";
        if(newstype==0)
        {
            if(newsindex<0)
            {
                newstitle = document.getElementById("rntitle").value;
                newstext = document.getElementById("rntext").value;
            }
            else
            {
                newstitle = document.getElementById("rntitle" + newsindex).value;
                newstext = document.getElementById("rntext" + newsindex).value;
            }
        }
        $.ajax({
            type: "POST",
            url: "submit.php",
            data:{ add: 1, type: newstype, index: newsindex, title: newstitle, text: newstext  },
            success: function(data){
                console.log(data);
                console.log(ajax.responseText);
            }
        });
    }
</script>

>>显示错误发生的位置。错误是:

Uncaught TypeError: Cannot read property 'getElementsByTagName' of null
    at refresh_regnews (admin.php:106)
    at XMLHttpRequest.rnxhttp.onreadystatechange (admin.php:68)

这有很多不足之处,但我尽可能多地提供必需品。我已经预先创建了带有标题的regnews.xml文件和&#34; root-tag&#34;以便submit.php可以使用(并且不确定他们的服务器是否允许创建新文件)。

在几次提交后,regnews.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<newsitems>
    <entry>
        <date>2017/09/04 - 19:45:32</date>
        <title>Säkerheten Först</title>
        <text>
            Vi tar säkerheten på största alvar!
            &lt;img src="http://www.edwardleuf.org/gradiant.bmp" /&gt;
        </text>
    </entry>
    <entry>
        <date>2017/09/04 - 19:45:32</date>
        <title>Säkerheten I Förhand</title>
        <text>
            Vi tar säkerheten på största alvar!

        </text>
    </entry>
    <entry>
        <date>2017/09/04 - 19:45:32</date>
        <title>Kontainrarna Blockerade</title>
        <text>
            Och stacketet fick lida. &lt;i&gt;Eller kanske bilen själv?&lt;/i&gt;
        </text>
    </entry>
    <entry>
        <date>2017/09/09 - 12:55:16</date>
        <title>Vi bygger nytt<title>
        <text>
            Varje dag bygger vi något nytt.

            Man kan undra varför.
        </text>
    </entry>
    <entry>
        <date>2017/09/09 - 12:57:31</date>
        <title>Vi bygger nytt<title>
        <text>
            Varje dag bygger vi något nytt.

            Man kan undra varför.
        </text>
    </entry>
    <entry>
        <date>2017/09/09 - 12:57:46</date>
        <title>Vi bygger nytt<title>
        <text>
            Varje dag bygger vi något nytt.

            Man kan undra varför.
        </text>
    </entry>
</newsitems>

所以,尽管如此,我还是想知道为什么XMLHttpRequest()无法找到<entry>标签。或者我在某个地方的代码中写错了什么?有趣的是,当我只有一个<entry>进行测试时,它运行正常。

仅在Chrome中测试过(没有LastPass),因为这很可能是将要使用的工作。

1 个答案:

答案 0 :(得分:0)

实际上RNDocnull,因为responseXML要求完全有效XML,它会返回null。考虑检查响应XML,首先它需要从服务器发送的响应标头中Content-Type