Передача данных от сервера клиенту (XML, JSON)

Уроки по PHP, Javascript и т.п.

Передача данных от сервера клиенту (XML, JSON)

Сообщение Александр » 15 май 2011, 14:25

Передача данных от сервера клиенту (XML, JSON)
PHP, XML, JSON

Зачем использовать XML, JSON

При взаимодействии с сервером из флеш или других приложений, лучше использовать специальные форматы обмена данными.

Часто, начинающие передают множество данных, придумывая свою структуру, отделяя параметры запятыми, точками с запятыми и т.п. Из-за этого приходится обрабатывать ответ в своём приложении, а неотлаженный процесс обработки может вызвать ошибки, например при передаче в самом параметре разделяющего символа.
Логичнее использовать существующие форматы обмена данными XML или JSON.


JSON или XML?

В ActionScript не требуется дополнительных библиотек для работы с XML. В JavaScript можно сразу работать с JSON.

JSON - более компактный формат, но при работе в ActionScript требуется дополнительная библиотека.
Если в вашем flash приложении большое количество обмена информацией с сервером, то использование формата JSON предпочтительнее, даже не смотря на то что требуется дополнительная библиотека.
Если в вашем флеш приложении есть только 1-2 ответа по одному параметру, то можно ограничиться и форматом XML.



Чтобы ваш php скрипт на сервере возвращал данные в нужном формате, нужно просто сделать вывод строки с параметрами.

Например
XML
  1. echo '<?xml version="1.0" encoding="UTF-8"?>
  2. <response>'.$message.'</response>';

JSON

Файл скрипта должен быть в кодировке UTF-8 без BOM, тогда у вас будет меньше проблем с кодировкой при выводе данных в вашем приложении.
В скрипте желательно передать header с форматом. Это поможет обрабатываемому скрипту понять какой формат данных нужно обработать.

Для XML


Для JSON



В случае с XML, данные можно выводить в цикле, используя echo.
C JSON можно поступить так же. Но иногда бывает проще записать данные в массив, а затем просто декодировать их в JSON формат, используя функцию json_encode. Эта функция присутствует в PHP 5.


Передача одного параметра

XML
  1. <?php
  2. header('Content-Type: text/xml; charset=utf-8');
  3.  
  4. $message = 1;
  5. echo '<?xml version="1.0" encoding="UTF-8"?>
  6. <response>'.$message.'</response>'
  7. ?>

Ответ
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>1</response>


JSON
  1. <?php
  2. header('Content-Type: application/json; charset=utf-8');
  3.  
  4. $arr = array('response'=>1);
  5. echo json_encode($arr);
  6. ?>

Ответ


Для передачи одного параметра можно сделать и так

и получить такой же ответ.


Передача нескольких однотипных параметров

XML
  1. $arr = array('abc','def','ghi');
  2. echo '<?xml version="1.0" encoding="utf-8"?>
  3. <response list="true">'."\n";
  4. while (list($key, $val) = each($arr)) {
  5.     echo '<item>'.$val.'</item>'."\n";
  6. }
  7. echo '</response>';

Ответ
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <response list="true">
  3.  <item>abc</item>
  4.  <item>def</item>
  5.  <item>ghi</item>
  6. </response>


JSON

Ответ



Передача однотипных параметров с вложенными свойствами

XML
Придется обходить все вложенные массивы. В результате получится довольно большой ответ от сервера, по сравнению с JSON.
Ответ
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <response list="true">
  3. <item>
  4. <id>1</id>
  5. <title>флаппс.ру</title>
  6. <description>Описание Элемента 1</description>
  7. </item>
  8. <item>
  9. <id>2</id>
  10. <title>Элемент 2</title>
  11. <description/>
  12. </item>
  13. </response>


JSON
  1. $arr = array('response'=>array(
  2.                             array('id'=>1,'title'=>"флаппс.ру",'description'=>"Описание Элемента 1"),
  3.                             array('id'=>2,'title'=>"Элемент 2",'description'=>"")
  4.                             ));
  5. echo json_encode($arr);

Ответ
  1. {"response":[{"id":1,"title":"\u0444\u043b\u0430\u043f\u043f\u0441.\u0440\u0443","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 1"},{"id":2,"title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 2","description":""}]}

Тут можно наткнутся на такую проблему, что русские буквы будут записаны в таком формате

вместо простого флаппс.ру

Стандартная функция json_encode заменяет символы кириллицы.
Скрипт клиента нормально обработает такой ответ и выведет данные в нужном виде. Но это может помешать отладке приложения.

Чтобы скрипт возвратил русские буквы без замены, можно добавить в скрипт функцию json_encode_cyr и вызвать её вместо функции json_encode
  1. function json_encode_cyr($arr) {
  2.     $trans = array(
  3.     '\u0410'=>'А', '\u0411'=>'Б', '\u0412'=>'В', '\u0413'=>'Г', '\u0414'=>'Д', '\u0415'=>'Е',
  4.     '\u0401'=>'Ё', '\u0416'=>'Ж', '\u0417'=>'З', '\u0418'=>'И', '\u0419'=>'Й', '\u041a'=>'К',
  5.     '\u041b'=>'Л', '\u041c'=>'М', '\u041d'=>'Н', '\u041e'=>'О''\u041f'=>'П', '\u0420'=>'Р',
  6.     '\u0421'=>'С', '\u0422'=>'Т', '\u0423'=>'У', '\u0424'=>'Ф', '\u0425'=>'Х', '\u0426'=>'Ц',
  7.     '\u0427'=>'Ч', '\u0428'=>'Ш', '\u0429'=>'Щ', '\u042a'=>'Ъ''\u042b'=>'Ы', '\u042c'=>'Ь',
  8.     '\u042d'=>'Э', '\u042e'=>'Ю', '\u042f'=>'Я',
  9.     '\u0430'=>'а', '\u0431'=>'б', '\u0432'=>'в', '\u0433'=>'г''\u0434'=>'д', '\u0435'=>'е',
  10.     '\u0451'=>'ё', '\u0436'=>'ж', '\u0437'=>'з', '\u0438'=>'и', '\u0439'=>'й', '\u043a'=>'к',
  11.     '\u043b'=>'л', '\u043c'=>'м', '\u043d'=>'н', '\u043e'=>'о''\u043f'=>'п', '\u0440'=>'р',
  12.     '\u0441'=>'с', '\u0442'=>'т', '\u0443'=>'у', '\u0444'=>'ф', '\u0445'=>'х', '\u0446'=>'ц',
  13.     '\u0447'=>'ч', '\u0448'=>'ш', '\u0449'=>'щ', '\u044a'=>'ъ''\u044b'=>'ы', '\u044c'=>'ь',
  14.     '\u044d'=>'э', '\u044e'=>'ю', '\u044f'=>'я');
  15.     return strtr(json_encode($arr),$trans);
  16. }
  17.  
  18. echo json_encode_cyr($arr);

Ответ
  1. {"response":[{"id":1,"title":"флаппс.ру","description":"Описание Элемента 1"},
  2. {"id":2,"title":"Элемент 2","description":""}]}

За это сообщение автора Александр поблагодарили - 4:
george514, Heavenanvil, kambucha, ukhov
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Передача данных от сервера клиенту (XML, JSON)

Сообщение Happy » 25 ноя 2011, 23:46

Я передаю данные из базы данных в приложение методом POST через echo.
Например,
  1. echo $sql_data['uid'].' - '.$sql_data['visits'].'<br />';

В приложении могу вывести их в текстовое поле.
Например,

Подскажите как, например, uid в переменную засунуть?
Happy

 
Сообщения: 20
Зарегистрирован: 19 ноя 2011, 23:14
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Re: Передача данных от сервера клиенту (XML, JSON)

Сообщение Александр » 27 ноя 2011, 16:18

Happy
Первое сообщение темы прочитай. Используй JSON.
Потом читай Работа с JSON в ActionScript 3.0
Если не хочешь использовать XML и JSON, то как твой вопрос относится к теме урока? Тогда сам парси свою строку, которую передаёшь.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Re: Передача данных от сервера клиенту (XML, JSON)

Сообщение XELAD » 23 июн 2013, 01:39

Долго и упорно пытаюсь заставить работать JSON в XML. Некоторые колонки в БД содержат записи в JSON, и там есть кавычки, причём двойные. Если такую запись вывести в качестве значения одного из поля в xml, то xml разваливается...
Подскажите, может есть функция преобразования JSON во что-то такое, что может быть впихнуто в XML, а уже потом во flash'е без бубна понято? Или же закодирование двойных кавычек при выводе из базы?
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Передача данных от сервера клиенту (XML, JSON)

Сообщение Александр » 02 июл 2013, 20:28

XELAD
addslashes не помогает?
Смысл использовать xml и json одновременно?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Re: Передача данных от сервера клиенту (XML, JSON)

Сообщение XELAD » 02 июл 2013, 22:14

Александр
Да без меня тут накодили некоторые. Переписал всё на JSON. Если в JSON попадается значение в виде JSON, то считывается как string во flash. И тогда я её переделываю в array. Думал, что именно в "JSON в JSON" будут проблемы, parse начнёт переделывать и то, что является значением, и будет мешанина. Но всё было хорошо.
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.


Вернуться в Уроки на другие темы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0