php - ajax php总是返回null

标签 php mysql ajax

嗨,我正在尝试使用多个 ajax 函数,但我不确定是否可行。

当您输入用户名时,我的第一个被调用

onkeyup="UsernameTaken(this.value);"

另一个在体内被调用

onload="BattlePlayers();"

功能是这样的

    var xhttp;
if (window.XMLHttpRequest) {
    xhttp = new XMLHttpRequest();
    } else {
    xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
function UsernameTaken(name){
    if (name == "") {
        document.getElementById("UsernameTaken").innerHTML = "";
        return;
    }
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("UsernameTaken").innerHTML = this.responseText;
        }
    };
    xhttp.open("GET", "CheckUsername.php?q="+name, true);
    xhttp.send();
}
function BattlePlayers(){
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("BattleTable").innerHTML = this.responseText;
        }
    };
    xhttp.open("GET", "GetPlayers.php", true);
    xhttp.send();
}

然后似乎总是返回空白的战斗玩家的 php 是这样的

   <?php
$link = mysqli_connect("","","","");
if (isset($_SESSION['username'])) {
        $x = 0; 
            $sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; ";
            $result = mysqli_query($link,$sql);
            $toecho ="";
            while($row = mysqli_fetch_assoc($result)){
                if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates
                    $toecho .="<tr>";
                    $toecho .="<th>".$row['username']." </th>";
                    $toecho .="<th>Level: ".$row['Level']." </th>";
                    $toecho .="<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>";
                    $toecho .="<th>Win Chance: ";
                    $toecho .= CalculateWinChance($link,$row['Defence']);
                    $toecho .="<input type='hidden' name='hidden1' value='".$row['Defence']."' />";
                    $toecho .="<input type='hidden' name='hidden2' value='".$row['username']."' />";
                    $toecho .="<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>";
                    $toecho .="</tr>";
                }
            }
            echo $toecho;
        }
?>

它似乎根本没有传达给战斗玩家,我已经尝试回显来自 getplayers 的警报,但没有任何结果。我已经通过在不同阶段发出警报来确认正在调用 javascript。当它到达 getplayer 时,它似乎就停止了。我在这里做错了什么?

最佳答案

如果您从逻辑上思考您的ajax请求正在做什么,那么您会意识到,如果通过ajax调用的页面需要访问 session 变量,那么,因为它实际上是一个与发起请求的页面分开的不同请求,您需要在该脚本中包含 session_start()

如果您有一个标准的 php 页面,例如:

<?php
    session_start();

    include 'functions.php';
    include 'classes.php';
    include 'GetPlayers.php';
?>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <!-- stuff -->
    </body>
</html>

在上面的示例页面中,您的脚本 GetPlayers.php 将有权访问 session 。

<?php
    session_start();

    include 'functions.php';
    include 'classes.php';
?>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <script>
            xhr=new XMLHttpRequest();
            xhr.onreadystatechange=function(){
                if( xhr.status==200 && xhr.readyState==4 ){
                    alert( xhr.response );
                }
            };
            xhr.open( 'GET','GetPlayers.php',true );
            xhr.send();
        </script>
    </body>
</html>

而在这里,如果 GetPlayers.php 顶部没有 session_start(),则两个页面不共享相同的 session ,因此当脚本检查 时if (isset($_SESSION['username'])) {.....} 它将失败。

关于php - ajax php总是返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609375/

相关文章:

javascript - 在 Javascript/PHP 中处理绝对 URL 的正确方法?

linux - 如何通过 linux 命令提示符设置 PHP session 变量?

mysql - 在 mysql 的时间戳字段中使用 <= 或 >=

javascript - 选择 $.ajax Jquery 的父级?

javascript - 禁用模式对话框的鼠标中键

PHP:意外的 PREG_BACKTRACK_LIMIT_ERROR

php - 检测非静态调用的静态函数

mysql - 表更新和 Primefaces ScheduleEvent

python - 通过检查数据库并放置来解析python

asp.net - AJAX Post 请求超时并显示 502 - Azure 网站