JSONP кроссдоменная передача данных

Добрый день, уважаемые читатели! Сегодня я расскажу вам как передавать данные между разными доменами.

Основой для передачи данных будет служить AJAX запрос через JSONP.

JSONP или «JSON with padding» (JSON с набивкой) это дополнение к базовому формату JSON. Он предоставляет способ запросить данные с сервера, находящегося в другом домене — операцию, запрещённую в типичных веб-браузерах из-за политики ограничения домена.

(c) Wiki 

Данный способ предполагает два способа передачи данных — GET и POST; а получает все в том же привычном JSON. Но тут есть некоторые нюансы — отличия — от передачи и получения данных, нежели через JSON. Рассмотрим процесс передачи данных.

Пример передачи между доменами.

Предположим у нас есть 2 домена:

1. site.ru

2. login.site.ru

site.ru посылает запрос на поддомен login.site.ru и в ответ должен получить сообщение о попытке авторизации.

site.ru / index.php:

jQuery/javascript


$(document).ready(function(){
 var user_name = $('input[name =\'login\']').val();

$.ajax({
 url: 'http://login.site.ru/index.php',
 dataType: 'jsonp',
 type: 'GET',
 data: { 'user_login' : user_name },
 success: function(data) {
 if(data['status'] === 'ok') {
// удачно

alert('Oh yeah!');
 }
 }

error: function(data) {

// ошибка

alert('Oh crap!');

}
 });
 });

Обратите внимание: в dataType указываем «jsonp»

А теперь код на стороне сервера, которому посылается запрос.

Чтобы сформировать ответ, нам необходимо получить ключ «callback», который отправляется вместе с другими данными, но только методом GET .

В переменной callback записывается закодированная информация.

PHP:


if(isset($_POST['user_login'])) {

// Если существует POST-запрос с ключом user_login, то делаем запрос в бд,

// проводим какие-нибудь манипуляции и отдаем ответ в формате json, но формируем его немного по-другому.

// Ответный массив данных будет называться $response

if(isset($_GET['callback'])) {

echo $_GET['callback'] . '(' . json_encode($response) . ')';

}

}

Как вы видите формат ответа JSONP отличается от JSON.

Вот и весь пример передачи данных между доменами. Если есть какие-либо вопросы — буду рад ответить на них в комментариях

3 комментария

Leave a Reply