Php 如何获取函数外的变量值以与偏移量一起使用

Php 如何获取函数外的变量值以与偏移量一起使用,php,jquery,sql,ajax,Php,Jquery,Sql,Ajax,我试图在mySQL查询中使用OFFSET,每当用户滚动到页面上的某个点时,返回新行值。我希望获得原始数据,以及用户在同一AJAX调用中滚动时返回的未来数据,因为到目前为止,我所使用的方法包括两个不同的函数,一个用于获取加载的原始数据,另一个用于获取新数据,这更难维护。例如,如果我收到评论,我将使用两个函数: function getComments() { $.ajax({}); //ajax call to load first five comments $(".thre

我试图在mySQL查询中使用
OFFSET
,每当用户滚动到页面上的某个点时,返回新行值。我希望获得原始数据,以及用户在同一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

            }
        });
    }
my
getComments()
函数和my
getMoreComments()
函数之间的唯一区别在于,AJAX调用分别调用了具有相同代码的PHP页面,除了SQL查询中包含偏移量的
getMoreComments()
PHP页面之外。为了组合这些函数,我尝试在一个AJAX函数中使用
OFFSET
,并设置了一个包含所需偏移量值的变量,但遇到了一个问题:函数外部的变量在函数内部没有给我它的值。我的函数,
getMyForumLikes()
,如下所示(为简洁起见缩短):

我包含了scroll函数,以便在用户向下滚动到div底部时再次运行该函数以获得更多行。
getMyForumLikes.php
页面如下所示(为简洁起见缩短):


在JavaScript中,您可以很好地使用函数范围之外的变量

var a=4;
(功能(){
console.log(a);//4
}());
真正的问题是PHP不理解您的JSON。要让PHP解析JSON,请使用
JSON\u decode

打印(json)解码(文件获取内容('php://input')));

我对此有点困惑-当我设置
var a=4
并使用与您一样编写的jQuery函数调用它时(
$(function(){console.log(a);});
),它会记录“4”。但是,当我创建像
function nameHere(){console.log(a)}
这样的javascript函数并使用
nameHere()
调用它时,它会记录一个值“undefined”。你知道这是为什么吗?我刚想出来了。我想这与我调用函数的位置有关。如果我在写过的函数之后调用它,它似乎可以正确地记录日志,但在我之前调用它的时候就不行了。尽管如此,请修复
$\u POST
$\u POST
用于
应用程序/x-www-form-urlencoded
,但我看到您在
数据类型中使用JSON。如果您使用的是json,您需要
json\u decode
。您是说我应该在
$idUsers
和PHP页面上的其他变量中使用
json\u decode
,就像这样<代码>$idUsers=mysqli\u real\u escape\u字符串($conn,json\u decode($\u POST['idUsers'))抱歉,我弄糊涂了,我当时以为
数据类型
是请求的内容类型,但不是,它实际上是服务器响应类型的设置。如果您发送带有
contentType
的纯json字符串或其他内容,您会执行
json\u解码
,但这不是您要做的。进行
    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;

        }

    });

<?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