2014-11-08 137 views
-1

我想为我的网站创建一个游戏服务器查询,我希望它加载内容,保存并稍后回显。但是,它似乎并没有回应。它通过ID选择元素并假定回显VAR的内容。为什么我的代码不能传递给我的div?

这里是我的HTML代码:

<center><div id="cstrike-map"><i class="fa fa-refresh fa-spin"></i>&nbsp;&nbsp;<b>Please wait ...</b><br /></div> 

的JavaScript:

<script type="text/javascript"> 
      var map = ""; 
      var hostname = ""; 
      var game = ""; 
      var players = ""; 
     $.post("serverstats-cstrike/cstrike.php", { func: "getStats" }, function(data) { 
      map = (data.map); 
      hostname = (data.hostname); 
      game = (data.game); 
      players = (data.players); 
     }, "json"); 
     function echoMap(){ 
      document.getElementByID("cstrike-map"); 
      document.write("<h5>Map: " + map + "</h5>"); 
     } 
    </script> 

PHP文件:


query.php

/* SOURCE ENGINE QUERY FUNCTION, requires the server ip:port */ 
function source_query($ip) 
{ 
$cut = explode(":", $ip); 
$HL2_address = $cut[0]; 
$HL2_port = $cut[1]; 

$HL2_command = "\377\377\377\377TSource Engine Query\0"; 
$HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3); 
fwrite($HL2_socket, $HL2_command); $JunkHead = fread($HL2_socket,4); 
$CheckStatus = socket_get_status($HL2_socket); 

if($CheckStatus["unread_bytes"] == 0) 
{ 
    return 0; 
} 

$do = 1; 
while($do) 
{ 
    $str = fread($HL2_socket,1); 
    $HL2_stats.= $str; 
    $status = socket_get_status($HL2_socket); 
    if($status["unread_bytes"] == 0) 
    { 
     $do = 0; 
    } 
} 
fclose($HL2_socket); 

$x = 0; 
while ($x <= strlen($HL2_stats)) 
{ 
    $x++; 
    $result.= substr($HL2_stats, $x, 1);  
} 
$result = urlencode($result); // the output 
return $result; 
} 

/* FORMAT SOURCE ENGINE QUERY (assumes the query's results were urlencode()'ed!) */ 
function format_source_query($string) 
{ 
$string = str_replace('%07','',$string); 
$string = str_replace("%00","|||",$string); 
$sinfo = urldecode($string); 
$sinfo = explode('|||',$sinfo); 
$info['hostname'] = $sinfo[0]; 
$info['map'] = $sinfo[1]; 
$info['game'] = $sinfo[2]; 
if ($info['game'] == 'garrysmod') { $info['game'] = "Garry's Mod"; } 
elseif ($info['game'] == 'cstrike') { $info['game'] = "Counter-Strike: Source"; } 
elseif ($info['game'] == 'dod') { $info['game'] = "Day of Defeat: Source"; } 
elseif ($info['game'] == 'tf') { $info['game'] = "Team Fortress 2"; } 
$info['gamemode'] = $sinfo[3]; 
return $info; 
} 

cstrike.php

include('query.php'); 
$ip = 'play1.darkvoidsclan.com:27015'; 
$query = source_query($ip); // $ip MUST contain IP:PORT 
$q = format_source_query($query); 

$host = "<h5>Hostname: ".$q['hostname']."</h5>"; 
$map = "<h5>Map: ".$q['map']."</h5>"; 
$game = "<h5>Game: ".$q['game']."</h5>"; 
$players = "Unknown"; 

$stats = json_encode(array( 
"map" => $map, 
"game" => $game, 
"hostname" => $host, 
"players" => $players 
)); 
+0

看到当前代码的输出,点击[浏览](http://darkvoidsclan.com/home/servers.php) – richlen99 2014-11-08 22:33:52

+1

您的AJAX回调函数集一堆变量,但它不会更新DOM中的任何内容来显示它们。 – Barmar 2014-11-08 22:37:31

+1

我不明白你的'echoMap'函数在做什么。你可以调用'getElementById',但不要将它分配给任何东西。然后调用'document.write()',如果在页面加载完成后调用它,它将替换整个页面。 – Barmar 2014-11-08 22:39:22

回答

0

所以我所做的只是将我需要的内容反馈到PHP文件中,然后获取HTML内容并使用它。

这似乎是最有力和最简单的方式来做我想做的OP。

<script type="text/javascript"> 
      $(document).ready(function(){ 
       $.post("stats/query.cstrike.php", {}, 
        function (data) { 
         $('#serverstats-wrapper-cstrike').html (data); 
         $('#serverstats-loading-cstrike').hide(); 
         $('#serverstats-wrapper-cstrike').show ("slow"); 
        }); 
      }); 
     </script> 

PHP

<?php 
    include 'query.php'; 
    $query = new query; 
    $address = "play1.darkvoidsclan.com"; 
    $port = 27015; 
    if(fsockopen($address, $port, $num, $error, 5)) {   
     $server = $query->query_source($address . ":" . $port); 
     echo '<strong><h4 style="color:green">Server is online.</h4></strong>'; 
     if ($server['vac'] = 1){ 
      $server['vac'] = '<img src="../../images/famfamfam/icons/tick.png">'; 
     } else { 
      $server['vac'] = '<img src="../../images/famfamfam/icons/cross.png">'; 
     } 
     echo '<b>Map: </b>'.$server['map'].'<br />'; 
     echo '<b>Players: </b>'.$server['players'].'/'.$server['playersmax'].' with '.$server['bots'].' bot(s)<br />'; 
     echo '<b>VAC Secure: </b>&nbsp;'.$server['vac'].'<br />'; 
     echo '<br />'; 
    } else { 
     echo '<strong><h4 style="color:red">Server is offline.</h4></strong>'; 
     die(); 
    } 
?> 
0

有一些事情是我无法从你的代码明白了,echoMap()有点搞砸了......但假设你的PHP正常看来你是在发布请求完成时不会调用echomap函数。

添加右后echoMap()players = (data.players);

如果要修改的div id为 '的cstrike地图',你可以使用jQuery:

更改JSechoMap这个

function echoMap(){ 
    $("#cstrike-map").html("<h5>Map: " + map + "</h5>"); 
} 
0

你需要显示在$.post回调的响应:

$.post("serverstats-cstrike/cstrike.php", { func: "getStats" }, function(data) { 
    $("#map").html(data.map); 
    $("#hostname").html(data.hostname); 
    $("#game").html(data.game); 
    $("#players").html(data.players); 
}, "json"); 

您还没有表现出你的HTML,所以我只是做了标识为您希望每个这些东西展现的地方。

+0

我想集成你的答案和@Ax_6的答案,但为了做到这一点,我需要采用POST回调并以这种方式显示它:'function echoMap(){$(“#cstrike-map” ).html(“

地图:”+ map +“
”); }' – richlen99 2014-11-08 22:57:33

+0

你可以从回调函数中调用'echoMap()'。您应该将它们作为参数传递给函数,而不是设置全局变量。 – Barmar 2014-11-08 23:00:46

相关问题