JSON (Java Script Object Notation) – это относительно новый формат представления данных. Он позволяет записать в виде строки любой набор переменных (массивов, объектов), что делает его использование очень удобным в Ajax приложениях.
Рассмотрим обычную ситуацию. У нас есть html страница с формой и php скрипт, который обрабатывает данные, введённые в эту форму. Если запрос с данными формы отправляется обычным способом, то скрипт должен возвратить html страницу с результатами. Тут все однозначно. Но, если данные формы отправляются ajax запросом, то скрипт возвращает только результаты обработки, которые с помощью JavaScript вставляются в исходную страницу. Вот тут и возникает вопрос. В каком виде передавать результат?
Существуют два основных варианта. Первый – возвратить результаты обработки вместе с html разметкой. В этом случае, полученный результат просто вставляется в страницу без обработки. Но тут возникает несколько проблем. Во-первых, если вы захотите изменить дизайн страницы, то потребуется менять код в php скрипте. Во-вторых, если результат обработки должен быть вставлен в несколько различных фрагментов страницы, то придётся либо с помощью JavaScript разбирать полученный от сервера результат, либо передавать ещё и все промежуточные фрагменты.
Второй вариант предполагает возврат только результатов обработки (без html разметки). Получив данные, JavaScript функция вставляет их в соответствующие части страницы.
На сегодняшний день наиболее распространены два формата передачи результатов ajax запроса: XML и JSON.
С моей точки зрения, использование JSON удобнее, главным образом за счёт встроенных в JavaScript и PHP функций, упрощающих работу с этим форматом.
Прежде всего, посмотрим, как записываются данные в формате JSON. Допустим, у нас есть объект класса Table.
class Table { public $material = "дерево"; public $weight = 20.5; public $isAvailable = true; public $colors = array("черный", "коричневый", "серый"); public $dimensions = array("length"=>2.0, "width"=>1.2, "height"=>0.75); }
В формате JSON этот объект будет записан следующим образом:
{ "material":"дерево", "weight":20.5, "isAvailable":true, "colors":["черный","коричневый","серый"], "dimensions":{"length":2,"width":1.2,"height":0.75} }
Как видите, все довольно просто. Для каждого объекта в фигурных скобках через запятую приводятся все его параметры. Каждый параметр записывается в виде пары ключ:значение
. Если параметр является массивом, то его значения записываются в квадратных скобках. Кроме того, можно неограниченно вкладывать объекты и массивы друг в друга. Таким образом, в формате JSON можно представить практически любой набор данных.
Примечание: подробнее почитать об этом формате можно здесь.
Теперь разберём, как преобразовывать данные из объектов в JSON и обратно.
PHP
Преобразование данных в JSON выполняется с помощью функции json_encode(). Для обратного преобразования используется json_decode().
Например, результатом выполнения следующего кода
$test = array("111","222","333"); echo json_encode($test);
будет строка:
["111","222","333"]
JavaScript
Функция eval()
преобразует строку в формате JSON в объекты JavaScript.
Записать JavaScript объекты в формате JSON можно с помощью метода toJSONString()
.
Рассмотрим небольшой пример. Допустим, строка, полученная в ответ на ajax запрос, находится в переменной response
. В эту строку записан объект класса Table
(который мы рассматривали в начале статьи). Преобразуем эту строку в объект JavaScript.
var data = eval("(" + response + ")"); //теперь можно использовать объект data alert(data.material + "n" + data.weight + "n" + data.isAvailable + "n" + data.colors + "n" + data.dimensions.length + "; " + data.dimensions.width + "; " + data.dimensions.height);
Как видите, функции, входящие в состав PHP и JS обеспечивают достаточно комфортную и простую работу с JSON.
Преобразования сводятся к вызову одной функции. Это довольно ощутимое преимущество по сравнению с XML. Ведь в случае XML придётся просматривать все DOM дерево.
В следующей статье мы рассмотрим, как изменится обычное web приложение при использовании JSON.
Постовой
Системы gps позволят легко найти ваш автомобиль