2013-03-17 84 views
0

我有一些PHP,看起來像這樣:PHP json_encode到JS對象無法使用

$exec[0] = shell_exec("cat /etc/msm.conf | grep JAR_PATH"); 

$exec[1] = shell_exec("msm server list"); 
    if(strstr($exec[1],'[ ACTIVE ] "mc-srv" is running. Everything is OK.') !== FALSE){ 
     $exec[1] = 'mc online'; 
    }else{ 
     $exec[1] = 'mc offline'; 
    } 

$exec[2] = shell_exec("sudo ts status"); 
    if($exec[2] == 'Server is running'){ 
     $exec[2] = 'ts online'; 
    }else{ 
     $exec[2] = 'ts ofline'; 
    } 
echo json_encode($exec,JSON_FORCE_OBJECT); 

一個Ajax請求被髮送到頁面並返回JSON。 如果我使用console.log(JSON.parse(data))我在控制檯Object {0: "DEFAULT_JAR_PATH="server.jar"↵", 1: "mc online", 2: "ts ofline"}中看到這個,但是即使我使用關聯數組,我也無法訪問它的任何方法。

但如果我創建一個新的對象,並打印到控制檯它(在Chrome瀏覽ATLEAST)看起來完全在語法方面同樣突出exect我可以通過obj.method訪問它。

我在這裏做錯了什麼?

+0

我在你的php中沒有看到json_encode ... – 2013-03-17 15:48:39

+0

_「但是我不能訪問它的任何方法」_ - 除了那個不是_methods_,而是簡單的_properties_ - 你有什麼可訪問它們的東西? – CBroe 2013-03-17 15:51:58

+0

@DavidMcMullin對不起,我忘了複製那部分>。''echo json_encode($ exec,JSON_FORCE_OBJECT);'。 – wezternator 2013-03-17 16:15:04

回答

1

基於對象是如何被在控制檯輸出,它看起來像它正在解析沒關係通過JSON.parse和有效。

在這種情況下,你應該能夠訪問每個方法是這樣的:

var obj = JSON.parse(data); 
console.log(obj['0']); // returns "DEFAULT_JAR_PATH="server.jar"" 
console.log(obj['1']); // returns "mc online" 

obj.0不會在這種情況下工作,因爲方法名是數字。