Понимание основ JSONP и Rails - PullRequest
6 голосов
/ 25 августа 2010

Мне трудно найти основную информацию о том, как сделать JSONP с моим приложением ...

Позвольте мне объяснить, скажем, у меня есть приложение (приложение A), которое предоставляет ответ в json, как я могу вызвать этот скрипт с помощью jQuery с другого сайта и загрузить эти данные JSON? Я почти уверен, что могу просто сослаться на файл JS в приложении A и использовать его для загрузки данных на страницу, но кроме этого я немного растерялся в правильном соглашении сделать это ... любая помощь серьезно, очень признателен, даже просто указав мне в правильном направлении или статья будет здорово.

1 Ответ

8 голосов
/ 25 августа 2010

Это действительно довольно тривиально.

На стороне клиента вы делаете обычный ajax-запрос, просто с типом 'jsonp'.

$.ajax({
    dataType: 'jsonp',
    success: function(response) {
    }
});

На стороне сервера вы возвращаете данные вот так

'/**/' + params[:callback] + '("' + response + '");';

Это будет производить что-то вроде /**/callback_name("my_response");. my_response строка будет передана обработчику успеха ajax с помощью jquery.

Вы также можете возвращать объекты и массивы json, например callback_name([1, 2, 3]);

редактировать
Поток пойдет так.

  1. jquery отправляет ajax-запрос и автоматически предоставляет параметр callback.
  2. Ваш сервер записывает действительный код JavaScript в качестве ответа.
  3. Браузер выполняет возвращенный код JavaScript. Если он вызывает функцию обратного вызова, jquery возвращает вам параметр, переданный в функцию обратного вызова.

Также есть статья в википедии , если вы не понимаете, что такое jsonp.

2015 г. редактировать Обратите внимание, что Rails изменил способ, которым они это делают, из-за уязвимости безопасности. Они ожидают вызова функции с комментарием JavaScript, который я добавил в код выше. Это вопрос об изменении кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...