Разница jsonp и простой запрос на получение (кросс-домен) - PullRequest
4 голосов
/ 31 января 2012

Я должен отправить (и получить) определенные данные на сервер, используя JQuery и JSON. До сих пор работает, но не междоменный, и он должен быть междоменным.

Я посмотрел, как решить эту проблему, и нашел JSONP. Насколько я вижу, используя JSONP, я должен отправить обратный вызов и данные, используя GET (JQuery позволяет использовать «POST» в качестве метода, но когда я проверяю веб-трафик, я вижу, что он фактически отправляет GET и каждый в качестве параметра).

JSONP также требует изменений на сервере, потому что они ожидают POST-запрос с данными JSON, и им нужно реализовать что-то для обработки запроса GSON JSONP.

Итак, мне интересно, в чем разница между этим и отправкой данных в качестве параметров значения ключа в запросе GET?

Разница заключается в возможности использовать обратный вызов? Или что именно?

Извините, немного потерян ... заранее спасибо

Ответы [ 2 ]

5 голосов
/ 31 января 2012

JSONP не является отправкой формы. Это способ сообщить серверу через запрос GET, как сгенерировать контент для тега скрипта. Возвращенные данные представляют собой полезную нагрузку JavaScript (не только JSON!) С вызовом функции для обратного вызова, на который вы (по соглашению) ссылаетесь в запросе GET.

JSONP работает, потому что это хак, который не использует AJAX. Это не AJAX, и вам не следует путать его с этим, потому что он не не использует XMLHttpRequest в любой момент для отправки данных. Вот как это обходит ту же Политику происхождения.

В зависимости от браузеров, которые вы должны поддерживать, вы можете реализовать заголовки Cross-Origin Resource Sharing на стороне сервера, что позволит вам использовать обычные вызовы AJAX в доверенных доменах. Большинство браузеров (IE8, Firefox 3.5+ и т. Д.) Поддерживают CORS.

Другое решение, которое вы можете использовать, если не хотите использовать CORS или JSONP, - это написать скрипт PHP или Java-сервлет, который будет действовать как прокси. Это так же просто, как открытие нового соединения из скрипта, копирование всех входящих параметров из вашего кода AJAX в запрос и последующий сброс ответа в конце вашего скрипта.

2 голосов
/ 31 января 2012

Я нашел ответ, который работал для меня с междоменной проблемой и JSON (не JSONP). Я просто использовал:

header('Access-Control-Allow-Origin: *');

внутри моего файла json (file.php) и называется так:

var serviceURL = 'http://your-domain.com/your/json/location.php'
$.getJSON(serviceURL,function (data) {
   var entries = data;
   //do your stuff here using your entries in json
});

Кстати: это процесс получения, а не отправки.

...