2011-12-05 97 views
1

正在嘗試將PHP數組的值傳遞給Javascript。不知道我是否做得正確。將PHP數組傳遞給Javascript

PHP:

function toggleLayers(){ 
    for($i=0;$i<$group_layer_row;$i++){ 
     $toggleArray=mb_convert_encoding(mssql_result ($rs_group_layer, $i, 0),"UTF-8","SJIS")."_".mb_convert_encoding(mssql_result ($rs_group_layer, $i, 1),"UTF-8","SJIS"); 
     return $toggleArray; 
    } 
} 

JS:

var myArray = [JSON.parse("<?php echo json_encode($toggleArray); ?>")]; 
    for(var i=0;i < myArray.length; i++){ 
     if($myArray.getVisibility()==true){ 
      $myArray.getVisibility(false); 
     } 
    else{ 
     $myArray.getVisibility(true); 
    } 
} 

SQL(僅供參考):

$con = mssql_connect("myServer", "myUsername", myPassword"); 
$sql = "SELECT * FROM m_group_layer WHERE group_id=\"".$_SESSION["group_id"]."\" ORDER BY display_order"; 
$rs_group_layer = mssql_query ($sql, $con); 
$group_layer_row = mssql_num_rows($rs_group_layer); 

我一直在尋找其他一些類似的問題,答案要麼是模糊和/或其中有幾千個。

希望得到任何幫助,也請儘量解釋,如果你正在寫一本書,叫做「傻瓜指南傳遞PHP數組到JS」

感謝您的幫助。

編輯:

對不起,我的問題是很模糊的。這裏就是我想要做的事:

1.PHP函數從表中的所有記錄到數組(在這種情況下,他們是地圖圖層)

2.Javascript接收PHP數組和遍歷添加如果子句切換圖層。

希望這可以讓它更清晰。

+0

它工作嗎?什麼不行? – Dogbert

+0

它不工作..它不斷給我一個[JSON.parse(「null」)]聲明和對象不支持屬性或方法'getVisibility' – Yus

回答

2

這比您想象的要簡單。

改變這一行:

var myArray = [JSON.parse("<?php echo json_encode($toggleArray); ?>")]; 

要剛:

var myArray = <?php echo htmlspecialchars(json_encode($toggleArray), ENT_NOQUOTES); ?>; 

json_encode產生一個JSON字符串。將字符串回送到javascript上下文等同於JavaScript文字。該htmlspecialchars只是爲了必要的html轉義,並不是唯一的迴應json。

注意但是,您只能json_encode php對象或數組,而不是任何標量類型,如整數或字符串。這是JSON本身的限制。在你的toggleLayers()函數中,你返回一個字符串,而不是一個數組。

+0

你確定這個工作?我不認爲你可以將php標籤插入到這樣的JS腳本中... –

+0

我仍然得到空值... – Yus

+0

然後,你的代碼問題不在json層,而是在php層。您的php數組正在準備不正確。我添加了對'toggleLayers()'問題的解釋。 –

-5

那將是非常有用的一個東西理解:

您sumply 不能「傳遞值從PHP函數數組的Javascript」。
而是你必須創建JavaScript代碼使用PHP就像你正在創建HTML。

因此,3個簡單的步驟來解決任何問題用PHP - >客戶端傳輸:

  1. 建立你想一個純客戶端的代碼。讓它起作用。保存在某個地方。
  2. 創建一個PHP代碼來生成客戶端代碼。
  3. 比較代碼。如果不匹配 - 更正PHP代碼。重複,直到完成。