Я сушу здесь. Пользователь нажимает на опцию в списке выбора, затем jQuery отправляет xhr на сервер для обработки, ничего особенного здесь, код работает отлично (firebug показывает правильные данные из отчета).
Затем простой код, чтобы возвращать строки из базы данных, где W_id == $val
, а затем извлекать результаты в $result
, тогда результаты эха в качестве ответа json:
public function getCities($val) { $sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id"); $sth->execute(array(':w_id' => $val)); $result = $sth->fetchAll(PDO::FETCH_ASSOC); //print_r($result); header("content-type:application/json"); echo json_encode($result); }
Firebug показывает данные Post, но без ответа. Но когда я раскомментирую print_r
, он показывает мне массив как ответ:
Array( [0] => Array( [id] => 1401 [name] => Aïn Bouchekif ) [1] => Array( [id] => 1402 [name] => Aïn Deheb ) [2] => Array( [id] => 1403 [name] => Aïn El Hadid ) and so on...
Это означает, что есть результаты, которые могут быть возвращены, но я не знаю, как их jsonify. Любая помощь приветствуется, спасибо.
Я думаю, что это проблема с кодировкой, вы можете проверить эту идею, используя json_last_error () . Вы можете добавить charset=utf-8
в заголовок:
$result = $sth->fetchAll(PDO::FETCH_ASSOC); //print_r($result); header("Content-type: application/json; charset=utf-8"); // <-- Here echo json_encode($result); echo json_last_error(); // <-- Here
Вот что сработало для меня: бит кодировки символов UTF-8 json_encode ()
public function getCities($val) { $sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id"); $sth->execute(array(':w_id' => $val)); header("Content-type: application/json; charset=utf-8"); $rows = array(); while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { $rows[] = array_map('utf8_encode', $row); } echo json_encode($rows); }
Я нашел другой ответ здесь. Как json_encode массив с французскими акцентами? но продолжает получать уведомления, обнаруженные незаконные символы.