如何解决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/> \" + paper_nodes[1].getElementsByTagName(\"category\")[0].firstChild.nodeValue + \"</br> <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中是否有第二个节点,以及您是否真的想将其作为目标。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。