Javascript 在一个不存在的仅附加的div中有两个ajax请求
我一直在写一个类似于9gag的页面。我尝试集成另一个人制作的投票系统,因为我不太熟悉AJAX请求,而且它不想工作 My index.php从mySQL数据库加载五篇文章,然后将它们附加到主div。向下滚动后,它会再附加五篇文章,等等。这是通过AJAX请求完成的,它的工作就像一个符咒 当我通过AJAX将它附加到div中时,我还将一些变量附加到div中,这样我就可以将它用于另一个AJAX请求,这就是问题所在。它只是不做任何AJAX请求。经过一个小时的调试,我开始怀疑是否可以将一些数据附加到div中,而div在原始index.php中不存在,然后使用它运行AJAX请求 我不会在这里发布pagination.js和它的内容,因为它可以工作,我只会在可能出错的地方发布ajax.php请求: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中,
<?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() { ... });