Это действительно довольно тривиально.
На стороне клиента вы делаете обычный 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]);
редактировать
Поток пойдет так.
- jquery отправляет ajax-запрос и автоматически предоставляет параметр
callback
.
- Ваш сервер записывает действительный код JavaScript в качестве ответа.
- Браузер выполняет возвращенный код JavaScript. Если он вызывает функцию обратного вызова, jquery возвращает вам параметр, переданный в функцию обратного вызова.
Также есть статья в википедии , если вы не понимаете, что такое jsonp.
2015 г. редактировать
Обратите внимание, что Rails изменил способ, которым они это делают, из-за уязвимости безопасности. Они ожидают вызова функции с комментарием JavaScript, который я добавил в код выше. Это вопрос об изменении кода.