2011-04-14 43 views
0

我在嘗試使用AJAX中的幾段文本更新div時遇到了一個奇怪的問題。AJAX在段落上被截斷

下面是我使用的功能:

  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只有第一段出現。如果我粘貼一個Javascript alert()來返回paper_desc,它只包含第一段。我試圖尋找其他節點,但該說,有一個只有1個節點:

alert(paper_nodes[i].getElementsByTagName("paper_desc").length); 

回答

0

您使用paper_desc [0] .firstChild.nodeValue

paper_desc [0]是一組節點:文本節點和br節點。你只能得到這個集合的第一個孩子,所以你只能得到第一個文本。

您的alert()調用僅顯示您只有一個paper_desc節點,而不是您內部有多少個節點。

我還發現奇怪的是,您使用paper_nodes [1],但我不知道是否有XML中的第二個節點,如果你真的想要它的目標。

+0

這就是我在使用「summary_div.innerHTML + =」中的實際值的地方......它看起來像這樣: 「+ paper_desc [0] .firstChild.nodeValue +」 我想我知道你的意思是「paper_desc [0]是一組節點:文本節點和br節點」,但是paper_nodes [i] .getElementsByTagName(「paper_desc 「).length說只有一個? 還是我誤解? 在我使用paper_nodes [1]的地方,我有點作弊。所有節點都來自同一類別,所以我只需從第一個節點中獲取類別即可創建類別標題。 – SylanderXS 2011-04-14 15:05:02

+0

好的,再次閱讀我的代碼後,事實證明,你當然是對的。 paper_desc下有7個childNode(用於文本和br)。是否有一種快速/簡單的方法將paper_desc的所有孩子節點合併到一個值中,還是必須遍歷它們? – SylanderXS 2011-04-14 15:37:11

+0

最後,我只是將這個paper_desc內容封裝在<![CDATA [..]]>中,並且工作完美。你指出我在paper_dec [i]下有更多的節點導致了這一點。感謝那。 – SylanderXS 2011-04-14 17:14:07