嗨,我正在尝试使用多个 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/