PHP JSON_ENCODE не приводит к реальному объекту / сделать строку массива в реальный объект / повернуть массив PHP в JSON
-
28-09-2019 - |
Вопрос
Вот мой 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 на нем.
Спасибо.
JS:
$.post('/ajax-database.php', function (data) {
console.log($.parseJSON(data));
$.each(data, function (key, value) {
console.log(value);
});
});
Решение
Я вижу, вы используете jQuery, если вы хотите, чтобы данные вернулись к вам как объект JSON, вам нужно сделать 1 из 2 вещей.
Добавьте заголовок («тип содержимого: приложение / JSON») в свой PHP-файл, это скажет jQuery, чтобы преобразовать его в объект json вместо в качестве текста
Добавьте параметр вперед на ваш $ .post,
$ .post ('/ ajax-database.php', Функция (данные) {console.log ($. Parsejson (данные)); $. {data, function (key, значение) {console.log (значение); });}, "Json");
Это скажет jQuery, чтобы позвонить вашему обработчику ошибок, если его не JSON, например, если ваш код PHP не удается и выводит HTML. Вы действительно должны использовать $ .ajax, я понятия не имею, почему кто-то использует $ .post, вы не можете сделать какую-либо значимую обработку ошибок.
Другие советы
Json. является строки. Если вы хотите иметь возможность повторять его, то вам нужно декодировать его.