Кроссдоменные запросы для передачи данных в формате json c помощью getJSON(jquery).

Кроссдоменные запросы для передачи данных в формате json c помощью getJSON(jquery).

Записки программиста

В этой заметке хочу рассказать о кроссдоменных запросах для передачи данных в формате 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.