2012-02-22 106 views
0

我從PHP檢索JSON:JSON對象輸出不對

<?php 
require("includes/connection.php"); 

//$queryString = "home"; 
$returnArray = array(); 

if (!$server) 
{ 
    die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error()); 
} 


$query = "SELECT * 
      FROM stuff 
      WHERE name LIKE '%" . $queryString . "%' 
      ORDER BY name LIMIT 1"; 

if($result = $server->query($query)) 
{ 
    while ($row = $result->fetch_assoc()) 
    { 
     array_push($returnArray, $row); 

    } 


}   

echo json_encode($returnArray); 

?> 

和Javascript:

var home = "home"; 
    $.getJSON("db/getJSON.php", {queryString: ""+home+""}, 

function(data){ 

    jsn = JSON.stringify(data); 
    $("#outputtester").html(jsn); 
     consoleOut("JSON: "+jsn); 

    }); 

它輸出相當不錯的字符串:

[{"UID":"1","IDS":"1,2,3","name":"home","type":"thing","cat_id":"home"}] 

但我認爲這兩個[]不應該在那裏,因爲它不是數組的數組?

我試圖把回聲 「的東西:」。在json_encode之前,所以我可以識別數組的數組。但它不會工作

我試圖訪問「數據」不字符串化,作爲一個對象,它應該是這樣的工作:

data.UID 

data.name 

,但我得到一個對象的對象輸出每一次,也當我字符串化他們..

任何想法,我做錯了嗎?

無法找到一大堆的信息對從JSON數組時,所有的東西我手動查找使JSON在JavaScript代碼..

+1

'$ returnArray'是數組的數組,所以結果似乎是細。 '$ returnArray'是一個數組。每個'$ row'都是一個數組。您正在將'$ row'添加到'$ returnArray' - >數組數組。當然,如果你的查詢只返回一個表格行,那麼你最終會得到一個只包含一個數組的數組。也許你想把'$ row'分配給'$ returnArray'。 – 2012-02-22 17:39:56

+0

1)代碼是SQL注入攻擊敞開的,2)即JSON輸出是正確的,則是編碼數據的行的陣列JSON其中的行是「對象」。這裏沒有問題(除了查詢代碼)。 – Chad 2012-02-22 17:42:12

回答

1

變化:

echo json_encode($returnArray); 

要:

if($returnArray) { 
    echo json_encode($returnArray[0]); 
} else{ 
    // here echo whatever you want to signify there were no results. 
} 
+0

那如果他只是想返回的第一個結果,這使得while循環愚蠢。 – Chad 2012-02-22 17:44:09

+0

權,似乎他確實因爲查詢限制爲1 – ggreiner 2012-02-22 17:47:42

+0

你是正確的,這整個頁面需要檢修。 – Chad 2012-02-22 17:48:28