Как получить значение переменной вне функции для использования с OFFSET - PullRequest
0 голосов
/ 02 марта 2020

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

1 Ответ

0 голосов
/ 02 марта 2020

В JavaScript вы можете прекрасно использовать переменные вне области действия функции.

var a = 4;
(function () {
  console.log(a); // 4
}());

Реальная проблема в том, что PHP не понимает вашу JSON. Чтобы получить PHP для анализа вашего JSON используйте json_decode.

print_r(json_decode(file_get_contents('php://input')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...