Заполнение нашей модели ORM
67
Затем мы определяем функцию с глобальным доступом. Как только сценарий бу дет загружен, будет вызвана эта функция: window.jsonCallback = function(result){ // Заполнение результата
> И все же это не простой процесс. К счастью, jQuery оформляет его в кратком API: jQuery.getJSON("http://example.com/data.json?callback=?H, function(result)
{
// Заполнение результата
»; jQuery ставит вместо последнего вопросительного знака в показанном выше URL случайным образом выбранное имя временной функции, создаваемой этой би блиотекой. Вашему серверу нужно прочитать аргумент вызова обратной функции и использовать его в качестве имени возвращаемой функции, в которую заключа ются данные.
Безопасность при использовании междоменных запросов Если вы открываете свой сервер для междоменных запросов или JSONP из любо го домена, нужно серьезно подумать о безопасности. Обычно политика междомен ных запросов не дает злоумышленнику вызвать, скажем, API Твиттера и извлечь ваши персональные данные, CORS и JSONP полностью изменяют положение вещей. При обычном Ajax-запросе все cookie-файлы вашей сессии отправляются вместе с запросом, значит, вы будете зарегистрированы в API Твиттера. Любые потенциальные злоумышленники получают полный контроль над вашей учетной записью, поэтому вопросы безопасности выходят на первый план. Если при использовании CORS/JSONP вы не указываете, какой домен может получить доступ к вашему API, нужно брать в расчет ряд ключевых обстоя тельств: О не показывайте никакой ценной информации, к примеру, адреса электронной почты; О не разрешайте никаких действий (например, «отслеживания» Твиттера). В качестве альтернативных мер просто создайте исчерпывающий список доменов, которым разрешено подключение, или же воспользуйтесь аутентификацией с по мощью открытого протокола авторизации ОAuth.
Заполнение нашей модели ORM Заполнение нашей модели ORM данными является совсем несложным процес сом. Для этого нужно всего лишь извлечь данные с сервера, после чего обновить записи нашей модели. Давайте добавим к объекту Model функцию populate(),