Результаты JSON предлагается сохранить - PullRequest
1 голос
/ 26 февраля 2011

Я новичок в JSON, и мне просто интересно, почему каждый раз, когда я пытаюсь передать результаты в виде JSON, браузер (Firefox) всегда предлагает мне сохранить его как локальный файл? Это поведение JSON? Я думал, что это будет похоже на передачу XML, когда браузер только покажет его. Я строю JSON, используя PHP:

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;

1 Ответ

6 голосов
/ 26 февраля 2011

JSON, конечно, не является XML. Если вы опустите заголовок Content-type или установите его, например, text / plain браузер отобразит его. Тем не менее, текущий тип содержимого является правильным. Установите расширение JSONView , чтобы иметь возможность видеть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...