В этой заметке хочу рассказать о кроссдоменных запросах для передачи данных в формате json. С такой задачей я столкнулся, когда было необходимо перенести некую информацию с одной системы в другую, причем никаких готовых решений для этого не было. Пришлось искать способ передачи массивных данных с одного сайта на другой. В итоге нашел решение благодаря функции getJSON на jQuery, так как было необходимо обрабатывать данные на javascript.
Дано: огромный php массив, 2 домена - источник и приемник. Первым делом необходимо было перевести массив в json-формат. Для этого существует хорошая функция json_encode, которая формирует массив любой структуры в строку json. Рассмотрим этот случай на примере:
<?
$mass = array('element1' => 'item1','element2' => 'item2','element3' => 'item3',);
$mass = json_encode($mass);
echo $mass;
?>
Результат в json-формате:
{"element1":"item1","element2":"item2","element3":"item3"}
Теперь, чтобы получить эти данные на другом сайте, необходимо добавить к исходной строке следующее:
echo $_GET['callback']."(".$mass.");";
Чтобы функция getJSON корректно словила нашу строку, в контенте данной страницы должна быть только json-строка, без лишнего текста и кода.
На сайте-приемнике размещаем следующий код:
$.getJSON("http://site.ru/index.php?callback=?", function(data){
console.info(data);
});
Запускаем страницу с этим кодом и получаем в консоли наши данные в объекте:
Object {element1: "item1", element2: "item2", element3: "item3"}
Дальше работайте с javascript, обрабатывая объект. Возможно будут проблемы с кодировкой русских символом. Имейте ввиду, что json формат работает только с UTF-8.