2011-02-25 59 views
1

我是JSON的新手,我只是想知道爲什麼每次我嘗試將結果作爲JSON傳遞時,瀏覽器(Firefox)總是提供我將其保存爲本地文件?這是JSON的行爲嗎?我認爲這就像傳遞XML一樣,瀏覽器只會顯示它。我使用PHP構建JSON:JSON提供要保存的結果

 
header('Content-Type: application/json'); 
$json = "{\n"; 
$json .= " \"address\": \n"; 
$ctr = 0; 
$numrows = mysql_num_rows($result); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
     $json .= " {\n"; 
    $json .= "  \"id\": \"". $row['id'] ."\",\n"; 
    $json .= "  \"lon\": \"". $row['lon'] ."\",\n"; 
    $json .= "  \"lat\": \"". $row['lat'] ."\",\n"; 
    $json .= "  \"road\": \"". $row['road'] ."\" \n"; 
    $json .= " }"; 
    $ctr++; 
    $json .= ($ctr < $numrows) ? ",\n" : "\n" ; 
} 
$json .= "}"; 
echo $json; 

回答

6

JSON當然不是XML。如果您省略了Content-type標頭或將其設置爲例如文本/純瀏覽器將呈現它。但是,當前的內容類型是正確的。安裝JSONView extension可以在瀏覽器中看到json,而不是下載窗口。

除此之外,永遠不會使用字符串函數構建JSON。 PHP有json_encode(),它接受一個對象/數組/ ..並返回一個有效的JSON字符串。因此,您的代碼應該如下所示:

header('Content-Type: application/json'); 
$rows = array(); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
    $rows[] = $row; 
} 
echo json_encode($rows); 
+0

「json_encode」爲+1。 –

+0

json_encode()如何處理類中的私有字段? –

+0

只包含公共字段。 – ThiefMaster