AJAX усекается по абзацу - PullRequest
0 голосов
/ 14 апреля 2011

У меня странная проблема при попытке обновить 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 (), чтобы вернуть paper_desc, он содержит только первый абзац.Я пытался найти другие узлы, но там говорится, что есть только 1 узел:

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

1 Ответ

0 голосов
/ 14 апреля 2011

Вы используете paper_desc [0] .firstChild.nodeValue

paper_desc [0] - это набор узлов: текстовые узлы и узлы br. Вы получаете только первый дочерний элемент этого набора, поэтому вы получаете только первый текст.

Ваш вызов alert () показывает, что у вас есть только один узел paper_desc, а не сколько узлов у вас внутри.

Мне также показалось странным, что вы использовали paper_nodes [1], но я не знаю, есть ли второй узел в вашем XML и действительно ли вы хотите нацелиться на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...