Хорошо на высоком уровне, JSONP позволяет вам указать имя функции обратного вызова, которую вы хотите вызвать, когда запрос AJAX возвращается с данными. Операции HTTP GET могут выполняться в разных доменах (когда вы встраиваете изображение с другого хоста, вы создаете HTTP GET). POST (и PUT, DELETE и т. Д.) Ограничены тем же доменом, что и документ (это называется той же политикой происхождения). JSONP, добавляет дополнительный параметр (обычно «обратный вызов») со значением функции JavaScript в вашем документе (функция обратного вызова). Сервер, отправляющий JSON, должен знать, чтобы извлечь значение для этого параметра. Ваш запрос может выглядеть так:
GET http://ical.example.com/cal.json?callback=_calDraw
Сервлет cal.json вернет это
_calDraw({event:{date:'12/25/2010',title:'Jason\'s birthday'}});
Теперь этот бит JavaScript ссылается на функцию обратного вызова, которую вы передали ему, но без соответствующего
function _calDraw(data) {
//render stuff
}
Возвращенные данные просто не получатся. Важно, чтобы у вас был какой-то уровень доверия к любому серверу, к которому вы делаете вызов JSONP, потому что вы даете им разрешение на выполнение JavaScript в вашем документе (они не должны возвращать что-то допустимое).
Надеюсь, это поможет!