2010-07-14 37 views
0

我只想讓我的PHP數組爲JS數組,我在這裏做錯了什麼?PHP數組與JS數組與jQuery和json_encode

PHP:

// get all the usernames 
$login_arr = array(); 
$sql = "SELECT agent_login FROM agents"; 
$result = mysql_query($sql); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    array_push($login_arr, $row["agent_login"]); 
} 
$js_login_arr = json_encode($login_arr); 
print $js_login_arr; // ["paulyoung","stevefosset","scottvanderlee"] 

JS:

var login_arr = "<?= $js_login_arr; ?>"; 
alert(login_arr); // acn't even get the string in?? 
var obj = jQuery.parseJSON(login_arr); 

回答

1

在JavaScript中移除從嵌入PHP的報價。符號是一個數組字面值,並且不需要引用(假設js_login_arr之後的PHP註釋是打印到javascript中的內容)。

+0

好的,謝謝!那麼parseJSON呢?我猜這是無效的JSON吧? – FFish 2010-07-14 21:24:07

+0

login_arr無效JSON - 它已經是一個有效的Javascript對象(一個字符串數組),所以不需要從JSON解析!如果你真的想(但是爲什麼?!),在你的JS中嵌入PHP的引號:'<?='''。$ js_login_arr。'''?>',但是你還必須事先設置反斜槓在$ js_login_arr本身內部引用......這只是愚蠢的。 – Chadwick 2010-09-08 11:34:14

1

一個簡單的方法就是通過分隔。拿你的數組(除非你需要字段名稱,不要使用assoc數組),將它分解成由不應該使用的某個字符分隔的字符串,例如%或者什麼,然後在JS中爆炸這個字符,你有你的陣列。當一個簡單的解決方案可以解決問題時,您無需始終使用JSON或XML等形式。

+0

這個建議既脆弱又增加了不必要的字符串處理 - 「某些字符」可能位於列表中的某個字符串中,從而導致爆炸。涉及字符串解析的「簡單解決方案」通常是潛在的錯誤所在。此外,爲什麼創建一個字符串並在您可以簡單地創建數組時分解到數組? – Chadwick 2010-07-14 21:26:35

+0

.split()e voila !!!這是一個偉大的提示Merlin,歡呼。 – FFish 2010-07-14 21:32:48

+0

哦,真的沒有比?我必須說...我的登錄名全部驗證,所以我可以安全地使用某個分隔符。此外,該陣列相當小(小於100) – FFish 2010-07-14 21:35:56

1

如果你想讓php數組爲JSON,你必須這樣做,如果$phpArray實際上是一個數組。

var jsJSON = echo json_encode($phpArray) 

如果你只想呼應和轉向JSON你必須給它像一個字符串:

$phpArray = '{'.$key1.':'.$val1','.$key2':'.$val2.'}'; 

這將肯定工作。