2010-12-13 2 views
0

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

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

+0

Первое сообщение, что вы код, второй вы устанавливаете правильные заголовки (http://snippets.dzone.com/posts/show/5882)? –

ответ

0

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>.

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

Смежные вопросы