-1

設定した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ファイルには、dbへの接続とクエリの実行に使用される関数のみが含まれています。ありがとう。

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;
?>
4

1 に答える 1

0

xml データの前にコンテンツをエコーし​​ているため、xml の解析で問題が発生します。を削除するecho $res;と、xml をうまく解析する必要があります。

于 2013-03-10T19:13:40.363 に答える