【发布时间】:2020-03-01 23:50:49
【问题描述】:
我尝试在 mySQL 查询中使用 OFFSET 以在用户每次滚动到页面上的某个点时返回新的值行。我想获取原始数据以及当用户在同一个 AJAX 调用中滚动时返回的未来数据,因为到目前为止我一直在做的方式包括两个不同的函数,一个用于获取原始数据加载一个用于获取新数据,这更难维护。例如,如果我要获取 cmets,我会使用两个函数:
function getComments() {
$.ajax({}); //ajax call to load first five comments
$(".threads").scroll(function() {
if ($(this).scrollTop() + $(this).height() >= $(this).prop('scrollHeight') - 1) {
getMoreComments(); //call function that loads more comments using "OFFSET" in sql query
}
});
}
getComments() 函数和getMoreComments() 之间的唯一区别是 AJAX 调用转到了具有相同代码的不同 PHP 页面,除了 getMoreComments() PHP 页面在 SQL 查询中包含 OFFSET。想要组合这些函数,我尝试在一个 AJAX 函数中使用 OFFSET 并设置一个包含我想要的偏移值的变量,但遇到了一个问题:函数外部的变量没有给我函数内部的值.我的函数,getMyForumLikes(),看起来像这样(为简洁起见):
var getMyForumLikesOffset = 0;
function getMyForumLikes() {
$.ajax({
url: 'includes/feed/getMyForumLikes.php',
type: 'POST',
data: {idUsers: idUsers, offset: getMyForumLikesOffset},
dataType: 'json',
success: function(data) {
data.forEach(function(item) {
console.log(item);
//do stuff with returned data here
});
}
});
}
$(".threads").scroll(function() { //call function again, increasing variable getMyForumLikesOffset to get new returned rows using OFFSET when user scrolls to bottom of div.
if ($(this).scrollTop() + $(this).height() >= $(this).prop('scrollHeight') - 1) {
getMyForumLikes();
getMyForumLikesOffset = getMyForumLikesOffset + 5;
}
});
当用户向下滚动到 div 的底部时,我包含了滚动功能以再次运行该功能以获得更多行。 getMyForumLikes.php 页面如下所示(为简洁起见缩短了):
<?php
include '../dbh.inc.php';
$idUsers = mysqli_real_escape_string($conn, $_POST['idUsers']);
$offset = mysqli_real_escape_string($conn, $_POST['offset']);
$q = "SELECT forumvotes.vote_id, forumvotes.idUsers AS voterId, forums.forum_id, forums.forum_title, forums.idUsers AS forumCreatorId, forums.seen, users.uidUsers, profileimages.image FROM forumvotes JOIN forums JOIN users JOIN profileimages ON profileimages.idUsers = users.idUsers AND forumvotes.forum_id = forums.forum_id AND forumvotes.idUsers = users.idUsers WHERE forums.idUsers = '$idUsers' AND forumvotes.idUsers != '$idUsers' ORDER BY forumvotes.vote_id DESC LIMIT 5 OFFSET $offset";
$r = mysqli_query($conn, $q);
//do stuff with returned rows here
发生的问题是在执行 ajax 调用时,我收到一条错误消息,指出未定义 $offset。我相信这是因为变量的范围,因为它在函数之外,我试图在函数内部调用它,所以它不起作用。我的问题是:如何在函数中获取 getMyForumLikesOffset 变量的值以获取我想要的新行?这可能吗,还是我必须使用两个函数来获取新的偏移值?让我知道这是否以任何方式令人困惑。谢谢。
【问题讨论】: