JSONP, CodeIgniter и Bookmarklets - PullRequest
       9

JSONP, CodeIgniter и Bookmarklets

0 голосов
/ 13 декабря 2010

Я создаю приложение для закладок с CodeIgniter и JavaScript / jQuery. Сейчас мое приложение CI просто возвращает закодированный в JSON массив в скрипт bookmarklet, но, очевидно, jQuery не сможет его использовать, поскольку это не проблемы JSONP / междоменной политики.

Как сделать так, чтобы моя функция CodeIgniter возвращала результаты JSONP? У меня нет лучшего понимания JSONP, поэтому, пожалуйста, извините за мое невежество.

1 Ответ

0 голосов
/ 13 декабря 2010

JSONP, насколько я знаю, просто загружает скрипт из URL вместо создания XHR. Вместо того, чтобы возвращать json / xml / plain-text, URL вернет javasript. Возвращаемый javascript будет просто вызовом глобальной функции с переданными данными JSON. jQuery удобно создает эту глобальную функцию перед запросом JSONP и отправляет ее идентификатор как «обратный вызов» в запросе JSONP.

Проще говоря, вы должны получить доступ к $ _GET ['callback'] (необходимо использовать $ .get для междоменного домена), в котором содержится имя функции обратного вызова. Например:

<?php echo $_GET['callback']."(".json_encode($arrayJSONData).")"; ?>

Это вернет javascript, который вызывает глобальную функцию javascript с передачей данных json.

Помните, что это не XHR / Ajax, а скорее динамическое добавление нового элемента сценария DOM, вы не можете POST-данные, и, следовательно, нет $ _POST. Как бы вы отправляли данные POST при создании элемента сценария в HTML? Это данные GET, которые могут быть переданы только: <script src='someurl.php?this=getdatastuff'></script>.

Я думаю, вот как это все работает. ХВ

...