Я пытаюсь использовать OFFSET
в своем запросе mySQL, чтобы возвращать новые строки значений каждый раз, когда пользователь прокручивает до определенной точки на странице. Я хочу получить исходные данные, а также будущие данные, которые возвращаются, когда пользователь прокручивает тот же самый вызов AJAX, потому что способ, которым я делал это до этого момента, включал две разные функции, одна для получения исходных данных который был загружен и один для получения новых данных, которые сложнее поддерживать. Например, если бы я получал комментарии, я бы использовал две функции:
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, содержали OFFSET
в запросе SQL. Желая объединить эти функции, я попытался использовать OFFSET
в одной функции AJAX и установить переменную, которая содержала требуемое значение смещения, но столкнулся с проблемой: переменная вне функции не давала мне своего значения внутри функция. Моя функция, 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
внутри функции, чтобы получить новые строки, которые я хочу? Возможно ли это, или мне нужно использовать две функции для получения новых значений смещения? Дайте мне знать, если это каким-то образом сбивает с толку. Благодаря.