Я выполняю SQL-запрос и получаю массив, обработанный с помощью fetch_assoc
. Наконец php
, я возвращаю его через ajax с расширением json_encode
.
echo json_encode($this->rows);
И это будет код в JS:
function search(){ //recojo los datos y llamo a askDatabase
var id_vehicle = document.buscar.id_vehicle.value;
var brand = document.buscar.brand.value;
askDatabase(id_vehicle, brand);
}
function askDatabase(id_vehicle, brand){ //Comunicación con PHP
__ajax("controller.php?p=list/", "id_vehicle="+id_vehicle+"&brand="+brand)
.done( function( info ){
console.log("DATA: " + info);
info = JSON.parse(info); //AQUI EL ERROR
renderData(info);
});
}
function __ajax(url, data){ //Ajax configured
var ajax = $.ajax({
"method": "POST",
"url": url,
"data": data
})
return ajax;
}
Я получаю следующее string (var info)
, но мне нужен объект:
[{"id_vehicle":"1","class":"business","brand":"Citroen","model":"C5 2.0hdi","year":"2010","km":"129000"}]
Который при попытке анализа выдает следующую ошибку, как сообщает консоль chrome:
Uncaught SyntaxError: Unexpected token in JSON at position 0
at JSON.parse (<anonymous>)
at Object.<anonymous> (controller.php:127)
at fire (jquery-3.1.1.js:3305)
at Object.fireWith [as resolveWith] (jquery-3.1.1.js:3435)
at done (jquery-3.1.1.js:9242)
at XMLHttpRequest.<anonymous> (jquery-3.1.1.js:9484)
Как я могу вернуть объект JSON из PHP через ajax?
Я уже решил это, это ничего из разбора JSON и т.д.
Проблема была просто в том, что документ был сохранен в кодировке UTF-8 с BOM.
Спецификация — это символ, который был вставлен в ответ и поэтому не мог применить JSON.parse();
Решение состоит в том, чтобы сохранить в UTF-8 без BOM.
Основываясь на вашем коде возврата
echo json_encode($this->rows);
, я говорю вам следующее. Вы должны перебирать строки (похоже, это прямой результат вашего оператора базы данных) таким образом, чтобы вы строили допустимый элемент JSON для каждой строки. Кхм, это просто пример для анализа и применения к вашему делу.в PHP
В JavaScript, где вы получаете
Если на стороне клиента вам требуется какое-либо преобразование, например
Разумеется, предыдущая точка присваивается переменной и к тому, что формируется в PHP, будет обращаться с помощью
recibido.datos
.может дело в парсере, попробуй так:
вместо: