2016-09-21 223 views
0

嗨即时尝试使用多重Ajax功能,即时消息不知道是可能的。ajax php总是返回null

我的第一个被称为当你输入你的用户名

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是通过在不同阶段发出警报来调用的。它只是当它到达玩家似乎停止。我在这里做错了什么?

+1

'session_start()'在哪里? –

+0

多数民众赞成在我的主要PHP区域 – GregHBushnell

+1

我的索引页顶部你需要在'GetPlayers.php'的顶部包含'session_start()'太 – RamRaider

回答

1

如果你从逻辑上思考你的ajax请求在做什么,那么你会意识到,如果通过ajax调用的页面需要访问会话变量,那么,因为它实际上是一个独立于发起请求的页面的独立请求,您需要在该脚本中包含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将有机会获得该会话。

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

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