php json_encode не приводит к реальному объекту / превращает строку массива в реальный объект / превращает массив php в json - PullRequest
1 голос
/ 27 ноября 2010

Вот мой PHP-код, он получает список коллекций от mongodb

$list = $db->dbname->listCollections();
$result = array();
$i=0;
foreach ($list as $thiscollection) {
    $result[$i++] = $thiscollection->getName();
}
echo json_encode( $result );

Я делаю console.log в обратном вызове, и это то, что я вижу.

["fruits", "dogs", "cars", "countries"]

Проблема в том, что это строка, а не массив. Мне нужно перебрать эти значения. Как я превращаю это в реальный объект или заставляю php выдавать мне json, а не массив php, чтобы я мог использовать для него parseJSON.

Спасибо.

ЯШ:

$.post('/ajax-database.php', function (data) {
    console.log($.parseJSON(data));
    $.each(data, function (key, value) {
        console.log(value);
    });
});

Ответы [ 2 ]

3 голосов
/ 27 ноября 2010

Я вижу, что вы используете jquery, если вы хотите, чтобы данные возвращались к вам как объект json, вам нужно выполнить одно из двух действий.

  1. add header ("Content-Введите: application / json ") в ваш php-файл, это скажет jquery преобразовать его в объект json вместо текста

  2. Добавьте четвертый параметр в ваш $ .post,

$.post('/ajax-database.php', function (data) {
    console.log($.parseJSON(data));
    $.each(data, function (key, value) {
        console.log(value);
    });
}, "json");

, который скажет jquery вызвать ваш обработчик ошибок, если он не json, например, если ваш php-код завершится неудачно и вместо этого выведет html.Вы действительно должны использовать $ .ajax, я понятия не имею, почему кто-то использует $ .post, вы не можете делать ЛЮБУЮ значимую обработку ошибок.

0 голосов
/ 27 ноября 2010

JSON - это строки. Если вы хотите иметь возможность перебирать его, вам нужно его декодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...