【问题标题】:Trouble parsing XML with JQuery [closed]使用 JQuery 解析 XML 时遇到问题 [关闭]
【发布时间】:2013-02-25 21:43:34
【问题描述】:

我正在做一个练习来实现一个无限滚动器,它从我设置的 MySQL 数据库中提取信息。我的滚动部分似乎可以工作,我的数据库、连接和查询在另一个文件中测试时似乎很好,而且我相信我的 XML 文件的结构是我想要的。但是,当我到达我尝试解析 XML、检索元素标签中的数据并将其附加到我的 html 的代码部分时,我在 Chrome 的检查器窗口中收到以下错误:

Uncaught Error: Syntax error, unrecognized expression: Resource id #2<?xml version="1.0"?>
<response><commentData>...(the rest of my XML file)

我对编程还很陌生,不知道是什么导致了问题。下面是我的代码。我有一些东西被注释掉了,所以希望这不会让任何人失望。此外,include.inc.php 文件只包含用于连接数据库和执行查询的函数。谢谢。

AJAXscroller.html:

<!DOCTYPE html>
<html lang="en-US">

<head>
    <meta charset="utf-8" />
    <title>Scroller with AJAX!</title>

    <link rel="stylesheet" href="styles/scroller.css" type="text/css">

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="./include/jquery.js"></script>
    <script src="./include/scroller.js"></script>
</head>

<body>
    <div id="info"></div>


    <section id="userComments">
        <p>Lorem ipsum dolor... </p> <!-- my code longer to fill page & requre scroll -->
            <p>Lorem ipsum dolor... tulla, semper gravida magna velit eu sem.</p>
            <p>Lorem ipsum dolor... tulla, semper gravida magna velit eu sem.</p>   
            <p>Lorem ipsum dolor... tulla, semper gravida magna velit eu sem.</p>   
            <p>Lorem ipsum dolor... tulla, semper gravida magna velit eu sem.</p>       
    </section>
    <div id="loaderGif"><img src="img/220.gif"></div>

</body>
</html>

scroller.js:

$(document).ready(
    function() 
    {
        $("#loaderGif").hide(); 
        var start = 0;     //variable to indicate the starting row in the db query
        var numRows = 30;  //this is the number of db rows to fetch with each query


        $(window).scroll(
            function()
            {
                var top = $(this).scrollTop();
                var txt = "scrollTop: " + top + 
                          "<br/>Win H: " + $(this).height() + 
                          "<br/>Page H: " + ($(this).height() + top) +
                          "<br/>Doc H: " + $(document).height();

                $("#info").html(txt);

            if ($(window).scrollTop() >= $(document).height() - $(window).height()) 
                {
                    $("#loaderGif").fadeIn(2000);
                    $.post("./include/AJAXscroll.php", {m: start, n: numRows}, function(xml) 
                       {
                           //code that happens when we get response

                           $("commentData", xml).each(
                               function()
                               {

                                   var userName = $(this).find("username").text();
                                   var comment = $(this).find("comment").text();
                                   var created = $(this).find("created").text();

                                   var str = "<hr><p>" + userName + " commented at " + created + "</p>" + comment;  

                                   $("#userComments").append(str);
                                   $("#loaderGif").fadeOut(2000);                          

                               }
                           );
                        }
                    ); 
                }  
            }
        );  
    }
);

AJAXscroll.php:

<?php

    include ("./include.inc.php");
    $link = connect();
    $db = "myTestDB";

    $m = $_POST["m"];
    $n = $_POST["n"];

    $sql = "SELECT * FROM comments WHERE username='Donna' ORDER BY created DESC LIMIT 0,30";
//  $sql = "SELECT * FROM comments WHERE username='Donna' ORDER BY created DESC LIMIT " . m . "," . n;
    $res = send_sql($sql, $link, $db);
    echo $res;

    $dom = new DOMDocument();
    $response = $dom->createElement("response");
    while ($row = mysql_fetch_assoc($res))         // create the XML file
    {
        $commentData = $dom->createElement("commentData");

        $username = $dom->createElement("username");
        $usernameValue = $dom->createTextNode($row["username"]);
        $username->appendChild($usernameValue);

        $comment = $dom->createElement("comment");
        $commentValue = $dom->createTextNode($row["comment"]);
        $comment->appendChild($commentValue);

        $created = $dom->createElement("created");
        $createdValue = $dom->createTextNode($row["created"]);
        $created->appendChild($createdValue);

        $commentData->appendChild($username);  
        $commentData->appendChild($comment);
        $commentData->appendChild($created);

        $response->appendChild($commentData);
     }  
     $dom->appendChild($response);
     $xmlString = $dom->saveXML();
//   $dom->save("myXML.xml");
     header('Content-type: text/xml'); 
     echo $xmlString;
?>

【问题讨论】:

  • 在输出 XML 之前不要输出Resource id #2
  • 只是好奇,但为什么投反对票?就因为这个错误很愚蠢?
  • 不,仅仅一个愚蠢的错误并不能成为 DV。发布大量不相关的代码,而不是针对您真正想了解的内容提出问题(例如,您是否从未想过 Resource id #2 在您的 XML 前面的位置?) - 简而言之:将鼠标移到您的否决按钮上看一个解释它的小标题。
  • 这正是我在开头说我对这一切都不熟悉的原因。如果我知道问题的根源是什么,那么我会更直接。我的目的不是用不相关的代码淹没帖子,而是尽可能完整地给出图片,因为我不知道问题出在哪里。我怀疑的领域将没有任何帮助,因为它是解析 JS 文件中的 XML 的代码。
  • 只需将错误消息粘贴到谷歌即可。 google.com/…

标签: php jquery xml ajax


【解决方案1】:

您在 xml 数据之前回显内容,这会导致解析 xml 出现问题。删除echo $res;,您应该可以很好地解析xml。

【讨论】:

  • 做到了。我是个白痴。我今天早些时候在解决另一个错误时添加了那个回声,甚至没有意识到我仍然有它(并没有真正关注 PHP 文件,因为我认为我对那个文件很清楚。谢谢......有时,显而易见的事情就在我们面前。
猜你喜欢
  • 2011-02-12
  • 2021-03-28
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多