AJAX在段落上被截断

问题描述

| 尝试使用来自AJAX的几段文字更新div时遇到一个奇怪的问题。 这是我正在使用的功能
            var receivePapers = getXmlHttpRequestObject();
        function get_papers(myCat){
            if (receivePapers.readyState == 4 || receivePapers.readyState == 0) {
                receivePapers.open(\"GET\",\'http://server/path/tocode/file.PHP?get_papers=1&student_id=1&category=\' + myCat,true);
                receivePapers.onreadystatechange = handlereceivePapers;
                receivePapers.send(null);
            }
        }

        function handlereceivePapers() {
            if (receivePapers.readyState == 4) {
                var container_div = document.getElementById(\'paper_container\');
                var xmldoc = receivePapers.responseXML;
                var paper_nodes = xmldoc.getElementsByTagName(\"paper\");
                var n_papers = paper_nodes.length;
                // Clear the whole container div.
                container_div.innerHTML = \"\";
                container_div.innerHTML = \"<table class=\'categoryHeader\' width=\'100%\'><tr><th class =\'categoryHeader\' width=\'80%\' ><br/>&nbsp;\" + paper_nodes[1].getElementsByTagName(\"category\")[0].firstChild.nodeValue + \"</br>&nbsp;<br/><br/></th></tr>\";
                container_div.innerHTML += \"<tr><td>\";
                for (i = 0; i < n_papers; i++) {
                    var paper_id = paper_nodes[i].getElementsByTagName(\"paper_id\");
                    var paper_title = paper_nodes[i].getElementsByTagName(\"paper_title\");
                    var paper_desc = paper_nodes[i].getElementsByTagName(\"paper_desc\");
                    var paper_time = paper_nodes[i].getElementsByTagName(\"paper_time\");
                    var user_real_name = paper_nodes[i].getElementsByTagName(\"user_real_name\");
                    var summary_div = document.createElement(\'div\');
                    summary_div.innerHTML += \"<table class=\'paper\'><tr><td class=\'paperLike\' width=80px rowspan=2 valign=\'top\'><div id=\'\" + paper_id[0].firstChild.nodeValue + \"\'><a href=\'#\' onclick=\\\"Vote(\'\" + paper_id[0].firstChild.nodeValue + \"\'); event.returnValue=false; return false;\\\"> <img src=\'images/Like.png\' style=\'padding-top:5px\' border=\'0\' /></a></div></td><td><table width=\'100%\'><tr><td class=\'paperTitle\' style=\'background-color:white; text-align=left; \'><a class=\'paperTitle\' style=\'padding-left:0;\' href=\'#\" + paper_id[0].firstChild.nodeValue + \"\'>\" + paper_title[0].firstChild.nodeValue + \"</a></td><td class=\'paperName\' style=\'margin-right:0; width:200px; background-color:white; text-align:right; vertical-align:text-top;\'><span align=\'right\' style=\'background-color:white; text-align:right; vertical-align:text-top; \' > \" + user_real_name[0].firstChild.nodeValue + \"</span></td></tr></table></td><td rowspan=\'2\' class=\'paperLength\' style=\'width:80px; text-align:right; padding-top:8px;\' >\" + paper_time[0].firstChild.nodeValue +  \" minutes</td></tr><tr><td class=\'paperDescription\' align=\'left\' colspan=\'1\'>\" + paper_desc[0].firstChild.nodeValue + \"</td></tr></table>\";
                    container_div.appendChild(summary_div);
                }
                container_div.innerHTML += \"</tr></td></table\";
            }
        }
这是返回的XML:
<root>
<paper id=\"23\">
    <paper_id>23</paper_id>
    <paper_title>title</paper_title>
    <paper_desc>
        First paragraph of desc
        <br/>
        <br/>
        Second paragraph of desc
        <br/>
        <br/>
        Third paragraph of desc
        <br/>
    </paper_desc>
    <paper_time>45</paper_time>
    <user_real_name>Bob Student</user_real_name>
    <user_id>2322</user_id>
    <category>Languages</category>
</paper>
...
当我将内容推送到container_div时,仅显示第一段。如果我将Java语言alert()插入以返回paper_desc,则它仅包含第一段。我曾尝试寻找其他节点,但这表示只有1个节点:
alert(paper_nodes[i].getElementsByTagName(\"paper_desc\").length);
    

解决方法

您使用paper_desc [0] .firstChild.nodeValue paper_desc [0]是一组节点:文本节点和br节点。您仅获得该集合的第一个孩子,因此您仅获得第一个文本。 您的alert()调用仅显示您只有一个paper_desc节点,而不显示您内部有多少个节点。 我还发现您使用paper_nodes [1]很奇怪,但是我不知道XML中是否有第二个节点,以及您是否真的想将其作为目标。