Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с возвратом данных в формате JSON
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Проблема с возвратом данных в формате JSON

Страниц (1): [1]
 

1. wget - 13 Декабря, 2013 - 12:06:44 - перейти к сообщению
Делаю запрос через Ajax, в файле php подключаюсь к базе данных, вывожу оттуда значения, конвертирую в JSON и возвращаю назад. Возвращаю в идеале, на практике не возвращается....

PHP:
скопировать код в буфер обмена
  1. $json = array('title'=>$title, 'author'=>$author, 'price'=>$price, 'nums'=>$nums);
  2. echo = json_encode($json, JSON_UNESCAPED_UNICODE);


Сам файл php показывает такой результат

CODE (javascript):
скопировать код в буфер обмена
  1. {"title":"Мать","author":"Горький","price":"400","nums":"12"}


Но он не возвращается. Если я просто вставляю эти строки

PHP:
скопировать код в буфер обмена
  1.  
  2. print <<<HERE
  3. {"title":"Мать","author":"Горький","price":"400","nums":"12"}
  4. HERE;
  5.  


То все нормально работает.

Подскажите что не так, ведь я перекодирую в JSON, почему он не хочет работать?
2. DelphinPRO - 13 Декабря, 2013 - 12:16:07 - перейти к сообщению
этот знак нафига?
echo = json_encode($json, JSON_UNESCAPED_UNICODE);
3. wget - 13 Декабря, 2013 - 12:18:44 - перейти к сообщению
DelphinPRO пишет:
этот знак нафига?
echo = json_encode($json, JSON_UNESCAPED_UNICODE);


Прошу прощения, случайно добавил, но в любом случае не работает...
4. Deonis - 13 Декабря, 2013 - 12:40:00 - перейти к сообщению
У вас после строчки:
что-нибудь в этом файле еще есть?

P.S. Константа JSON_UNESCAPED_UNICODE доступна начиная с PHP 5.4.0. С версие у вас всё в порядке? И вообще, имеет ли смысл отменять кодирование?
5. Panoptik - 13 Декабря, 2013 - 12:41:05 - перейти к сообщению
возможно у вас доп символы выводятся и json становится не валидным, проверьте на наличие выводимых данных включая пробелы, не выводятся ли случайные нотайсы, и попробуйте добавить header content-type application/json
6. wget - 13 Декабря, 2013 - 13:57:48 - перейти к сообщению
Deonis,

после ничего нет, версия PHP новая, локалка.

Panoptik,

добавил заголовок, а как проверить на доп символы?

Полностью php файл выглядит так

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. header('Content-type: application/json; charset=utf-8');
  4. require_once('connect.php');
  5.  
  6. $search = $_REQUEST['name'];
  7. $result = mysql_query("SELECT * FROM book WHERE author = '$search' OR title = '$search'", $link);
  8. $total = mysql_num_rows($result);
  9.  
  10. for ($i = 1; $i <= $total; $i++) {
  11. $row = mysql_fetch_array($result);
  12.  
  13. $title = $row['title'];
  14. $author = $row['author'];
  15. $price = $row['price'];
  16. $nums = $row['nums'];
  17.  
  18. $json = array('title'=>$title,'author'=>$author,'price'=>$price,'nums'=>$nums);
  19.  
  20. echo json_encode($json, JSON_UNESCAPED_UNICODE);
  21.  
  22. }
  23. ?>
  24.  


Пока рассчитан на вывод 1 строки, потом перепишу на вывод нескольких значений.
7. IllusionMH - 13 Декабря, 2013 - 14:00:00 - перейти к сообщению
wget, в любом инструменте разработчика откройте урл напрямую и посмотрите что возвращает
8. Toxa - 13 Декабря, 2013 - 14:02:12 - перейти к сообщению
тогда все в порядке
9. wget - 13 Декабря, 2013 - 14:02:37 - перейти к сообщению
IllusionMH пишет:
wget, в любом инструменте разработчика откройте урл напрямую и посмотрите что возвращает


В том-то и дело, что возвращает идеальную, с точки зрения JSON, строку

CODE (htmlphp):
скопировать код в буфер обмена
  1. {"title":"Мать","author":"Горький","price":"400","nums":"12"}


А вот передавать ее отказывается
10. IllusionMH - 13 Декабря, 2013 - 14:07:29 - перейти к сообщению
wget, попробуйте наверняка
11. wget - 13 Декабря, 2013 - 14:14:32 - перейти к сообщению
Ребят, кажется догадался, копал совсем не там.
Попробовал с латиницей, все работает. А вот кириллица отправляет запрос в php файл непонятной кодировкой и из-за этого проблемы возникают.
Проверил алертом отправляемое значение, выдает

name=%u0420%u041E и т.д....

Неожидал такого подвоха...

Использовал по где-то вычитанному совету escape(передаваемая строка) и попался на кириллице..
(Добавление)
В догонку такой вопрос, возможно ли в php с помощью какой-либо встроенной функции раскодировать escape в нормальные русские буквы?
12. IllusionMH - 13 Декабря, 2013 - 14:54:54 - перейти к сообщению
wget, http://www.php.net/manual/ru/fun...on.urldecode.php ?

 

Powered by ExBB FM 1.0 RC1