2013-05-22 82 views
0

是否可以將PHP返回分配給js變量?例如:分配JavaScript var到PHP返回

<script type='text/javascript'> 
var h = <?php include'dbconnect.php'; 
    $charl = (some number from another sql query) 
    $sql=mysql_query("selct type from locations where id='$charl'"); 
    echo $sql; ?> ; 
if(h == "hostile") { 
    (run some other js function) 
} 
</script> 

什麼,我需要做的就是從查爾(字符位置)一個文本值(類型),並將其分配給一個java腳本變量,並在其上運行的if語句。任何提示?

這裏是我的代碼更新。它不會返回任何錯誤,但它不會輸出我想要的方式。它應該只返回[類型]只應該等於敵對,城市,農場和類似的東西。它不會運行,除非整個字符串在同一行。我相信它返回整個字符串,而不僅僅是回聲(如我需要它)

function check_hostile() { var h = '<?php session_start(); include"dbconnect.php"; $charid=$_SESSION[\'char_id\']; $charloc=mysql_fetch_array(mysql_query("select location from characters where id=\'$charid\'")); $charl=$charloc[\'location\']; $newloc=mysql_fetch_array(mysql_query("select type from locations where id=\'$charl\'")); echo $newl[\'type\']; ?>'; 
if(h == "hostile") { 
if(Math.random()*11 > 8) { 
    find_creature(); 
} 
} 
$("#console").scrollTop($("#console")[0].scrollHeight); 
} 

下面是一個報警功能的輸出運行泰斯時。

<?php session_start(); include"dbconnect.php"; $charid=$_SESSION['char_id']; $charloc=mysql_fetch_array(mysql_query("select location from characters where id='$charid'")); $charl=$charloc['location']; $newloc=mysql_fetch_array(mysql_query("select type from locations where id='$charl'")); print $newloc['type']; ?> 
+1

沒有更好的通過AJAX來獲得H值爲:

我已經更新了你的代碼,以解決這個問題小,提高了代碼的可讀性? – Robert

+1

@RobertPodwika - 不需要那將涉及另一個HTTP請求並且是異步的。但是,如果僅使用PHP來確定腳本是否應該添加到文檔中,而不是生成一個變量,然後再測試它的客戶端,那麼它可能更有意義。 – Quentin

+0

您正在使用[an **過時的**數據庫API](http://stackoverflow.com/q/12859942/19068)並應使用[現代替換](http://php.net/manual/en/ mysqlinfo.api.choosing.php)。 – Quentin

回答

2

改成這樣

var h = <?php include "dbconnect.php"; 
$charl = (some number from another sql query) 
$sql=mysql_query("selct type from locations where id=$charl"); 
$row = mysql_fetch_row($sql); 
echo json_encode($row["type"]); ?>; 

json_encode()將PHP的值轉換成有效的JavaScript表示,你可以注入腳本。

+1

'var h = <?= json_encode($ row ['type'])?>;',實際上。否則,它會在引號中斷開(例如用'我是喇嘛'這個句子)。 –

+0

@MaëlNisonapt並已更改 –

1

是的,這是可能的,並且是相當普遍的做法。

但是你的代碼有一個小問題,它返回一個字符串,所以你必須把它用引號括起來用javascript。它

<?php 

include'dbconnect.php'; 
$charl = (some number from another sql query) 
$sql=mysql_query("select type from locations where id='$charl'"); 

if (mysql_num_rows($sql) > 0) { 
    $row = mysql_fetch_array($sql); 
    $h = $row['type']; 
} else { 
    $h = null; 
} 

?> 

<script type='text/javascript'> 

var h = '<?php echo $h; ?>'; 
if(h == "hostile") { 
    (run some other js function) 
} 

</script> 
+0

注意:我還懷疑代碼中存在與您的問題無關的PHP問題:php變量$ sql應該使用類似'mysql_fetch_array($ sql)'的方式進行處理,只有這樣您才能能夠訪問'類型'。 –

+0

似乎沒有工作....伊馬繼續玩它。 – user2408545

+0

稍微詳細一點會有幫助,你堅持什麼?正如我所說,我的答案只有您的原始問題的相關信息(混合PHP和JavaScript的可能性)。你的代碼中也明顯存在php/sql問題。如果你願意,我也可以解決這些問題。 –