Javascript 在一个不存在的仅附加的div中有两个ajax请求

Javascript 在一个不存在的仅附加的div中有两个ajax请求,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我一直在写一个类似于9gag的页面。我尝试集成另一个人制作的投票系统,因为我不太熟悉AJAX请求,而且它不想工作 My index.php从mySQL数据库加载五篇文章,然后将它们附加到主div。向下滚动后,它会再附加五篇文章,等等。这是通过AJAX请求完成的,它的工作就像一个符咒 当我通过AJAX将它附加到div中时,我还将一些变量附加到div中,这样我就可以将它用于另一个AJAX请求,这就是问题所在。它只是不做任何AJAX请求。经过一个小时的调试,我开始怀疑是否可以将一些数据附加到div中,

我一直在写一个类似于9gag的页面。我尝试集成另一个人制作的投票系统,因为我不太熟悉AJAX请求,而且它不想工作

My index.php从mySQL数据库加载五篇文章,然后将它们附加到主div。向下滚动后,它会再附加五篇文章,等等。这是通过AJAX请求完成的,它的工作就像一个符咒

当我通过AJAX将它附加到div中时,我还将一些变量附加到div中,这样我就可以将它用于另一个AJAX请求,这就是问题所在。它只是不做任何AJAX请求。经过一个小时的调试,我开始怀疑是否可以将一些数据附加到div中,而div在原始index.php中不存在,然后使用它运行AJAX请求

我不会在这里发布pagination.js和它的内容,因为它可以工作,我只会在可能出错的地方发布ajax.php请求:

    <?php
    include 'config/connection.php';
    $db = "test";
    $table = "posts";

    $offset = is_numeric($_POST['offset']) ? $_POST['offset'] : die();
    $postnumbers = is_numeric($_POST['number']) ? $_POST['number'] : die();

    $run = mysqli_query($con,"SELECT * FROM $db.$table ORDER BY id DESC LIMIT ".$postnumbers." OFFSET ".$offset);

    while($row = mysqli_fetch_array($run)) {
    echo "      <article>\n";
    echo "          <div id='title'><h1>".utf8_encode($row['title'])."</h1></div>\n";
    echo "          <div id='image'><img src='posts/".$row['dDate']."/".$row['image']."'></div>\n";
    echo "          <div id='text' class='item' data-postid='".$row['id']."' data-score='".$row['vote']."'>\n";
    echo "              <p>Beküldte: ".$row['postedBy']."\n";
    echo "              <div class='vote-span'><!-- voting-->\n";
    echo "                  <div class='vote' data-action='up' title='Vote up'>\n";
    echo "                      <i class='icon-chevron-up'></i>\n";
    echo "                  </div><!--vote up-->\n";
    echo "                  <div class='vote-score'>".$row['vote']."</div>\n";
    echo "                  <div class='vote' data-action='down' title='Vote down'>\n";
    echo "                      <i class='icon-chevron-down'></i>\n";
    echo "                  </div><!--vote down-->\n";
    echo "              </div>\n";
    echo "          </div>\n";
    echo "      </article>\n";
    }
    ?>
aa和vote.php文件:

    include('config/connection.php');
    # start new session
    session_start();

if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
if (isset($_POST['postid']) AND isset($_POST['action'])) {
    $postId = (int) mysql_real_escape_string($_POST['postid']);
    # check if already voted, if found voted then return
    if (isset($_SESSION['vote'][$postId])) return;
    # connect mysql db
    dbConnect();

    # query into db table to know current voting score 
    $query = mysql_query("
        SELECT vote
        from posts
        WHERE id = '{$postId}' 
        LIMIT 1" );

    # increase or dicrease voting score
    if ($data = mysql_fetch_array($query)) {
        if ($_POST['action'] === 'up'){
            $vote = ++$data['vote'];
        } else {
            $vote = --$data['vote'];
        }
        # update new voting score
        mysql_query("
            UPDATE posts
            SET vote = '{$vote}'
            WHERE id = '{$postId}' ");

        # set session with post id as true
        $_SESSION['vote'][$postId] = true;
        # close db connection
        dbConnect(false);
    }
}
}
?>
那么,是否有可能使用另一个类似这样的AJAX请求,或者我真的做错了什么


我正在使用jQuery 1.4.3。

啊哈,我打赌我知道问题出在哪里。您有五个初始div,它们通过以下方式附加了click事件处理程序:

$('.vote').click(function(){ ... });
但是,您正在通过无限滚动设备添加新的div,并且这些div没有附加事件。这是正确的行为,因为您没有重新运行代码以再次附加它们

jQuery中有一个聪明的设备可以帮助您解决这个问题。它允许您将事件附加到现在和将来的事物。要使用它,请尝试以下操作:

$('container-selector').on('click', '.vote', function() { ... });
带有“click”参数的on方法只是jQuery中附加事件的新的首选方法,如果您将处理程序添加为第二个参数,它将与现在一样。但是,如果添加新参数“.vote”,它将在整个容器选择器中将事件附加到与此匹配的任何对象,即使在附加事件时它不存在


您可以在这里使用“body”作为容器选择器,但出于性能原因,最好更具体一些。只要使用CSS选择器,它将包含您希望附加此特定事件处理程序的所有div。

哦,好吧,我真的不知道现在发生了什么,所以慢慢来:您是否在浏览器中查看了网络监视器,以观察AJAX请求在您认为应该发生时启动?您需要确保它启动时JavaScript代码未运行可能有原因,并且PHP以您预期的方式进行响应服务器端代码可能有问题,或者JavaScript中的接收可能有错误。此外,请检查浏览器控制台,查看是否有任何JavaScript错误。如果你想在PHP端进行跟踪,你可以在PHP端做一些简单的文件记录,没有JavaScript错误,AJAX请求也不会启动。另外,我可能忘了告诉您,我将JavaScript包括在标题中,因为它应该在那里。还是应该?我用你的语句替换了这个语句,但唯一的问题是我得到了一个javascript错误。我这样替换它:$'main'。单击,'.vote',函数{…};得到了这个错误:TypeError:“undefined”不是一个计算“$”main”的函数。在“我使用的是一个不能识别它的旧JQuery吗?”?我正在使用jQuery1.4.3当然,我已经使用了,而且它可以正常工作!但不知怎的,它给了我一个错误,就是:[error]加载资源失败:服务器响应的状态为404 Not Found vote.php,第0Ah行,如果您在升级中遇到困难,似乎可以使用,这是在1.4.2中添加的。根据phpMyadmin,查询不起作用,但现在取决于我:谢谢您的帮助!
$('.vote').click(function(){ ... });
$('container-selector').on('click', '.vote', function() { ... });