JavaScript. Подробное руководство, 6-е издание
Шрифт:
Прием использования элемента
Представьте, что вы пишете службу, которая обрабатывает GET-запросы и возвращает данные в формате JSON. Документы с общим происхождением могут пользоваться этой службой с помощью объекта
51
Термин «JSONP» предложил Боб Ипполито (Bob Ippolito) в 2005 году .
Именно здесь на сцену выходит символ «Р» из аббревиатуры JSONP. Когда обращение к службе реализовано с помощью элемента
она должна отправлять дополненные данные, как показано ниже:
Являясь телом элемента
Используя элемент <script> в качестве Ajax-транспорта, вы разрешаете своей веб-странице выполнять любой программный код на языке JavaScript, который отправит удаленный сервер. Это означает, что прием, описываемый здесь, не должен использоваться при работе с серверами, не вызывающими доверия. Впрочем, даже при работе с доверенным сервером следует помнить, что этот сервер может быть взломан злоумышленником, и злоумышленник сможет заставить вашу веб-страницу выполнить любой программный код и отобразить любую информацию, какую он пожелает, и эта информация будет выглядеть, как если бы она поступила с вашего сайта.
При этом следует отметить, что для веб-сайтов стало обычным делом использовать доверенные сценарии сторонних разработчиков, особенно сценарии, используемые для внедрения в страницу рекламы или «виджетов». Использование элемента <script> в качестве Ajax-транспорта для взаимодействия с доверенными веб-службами ничуть не опаснее.
Чтобы
На практике веб-службы, поддерживающие JSONP, не диктуют имя функции, такое как «handleResponse», которую должны реализовать все клиенты. Вместо этого они используют значение параметра запроса, позволяя клиентам самим указывать имя функции, и применяют его для дополнения ответа. В примере 18.14 для определения имени функции обратного вызова используется параметр «jsonp». Многие службы, поддерживающие JSONP, распознают параметр с эти именем. Также достаточно часто используется параметр с именем «callback», и вы можете изменить программный код примера, чтобы он смог работать со службами, предъявляющими определенные требования.
Пример 18.14 определяет функцию get JS0NP, которая выполняет запрос на получение данных в формате JSONP. В этом примере есть несколько тонкостей, о которых следует сказать особо. Во-первых, обратите внимание, что пример создает новый элемент
Пример 18.14. Выполнение запросов на получение данных в формате JSONP с помощью элемента
Метатель
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
рейтинг книги
Доктор. Заново
1. Доктор
Фантастика:
фэнтези
альтернативная история
рейтинг книги
Имперец. Том 4
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Смерч войны
1. Историческая библиотека
Проза:
военная проза
рейтинг книги
Справочник по лечению зависимостей
Справочная литература:
путеводители
рейтинг книги
Потомок бога 3
3. Локки
Фантастика:
аниме
фэнтези
рейтинг книги
Универсальный энциклопедический справочник
Справочная литература:
справочники
энциклопедии
рейтинг книги
Неизвестные страницы истории российского флота
Научно-образовательная:
история
военное дело: прочее
военная история
рейтинг книги
Избрание сочинения в трех томах. Том второй
Проза:
советская классическая проза
рейтинг книги
Полная история государства Российского в одном томе
Научно-образовательная:
история
рейтинг книги