2014-11-08 141 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

相關問題