Подтвердить что ты не робот

JSONP и Backbone.js

Я хотел бы использовать Backbone.js с элементом управления REST api I. Я надеялся, что сценарии REST api и Backbone будут жить в другом домене, но, к сожалению, это будет заблокировано, так как это запрос с кросс-доменом.

Имеет ли Backbone.js встроенные функции для поддержки запросов JSONP? Или, альтернативно, есть ли у кого-нибудь опыт в ручном добавлении поддержки JSONP к системе Backbone.js sync?

4b9b3361

Ответ 1

Вы не сможете использовать весь API REST с JSONP. Вы можете отправлять запросы GET только с помощью JSONP (он работает, записывая новый тег <script> в текущем документе, а затем вызывающий обратный вызов javascript...).

Чтобы использовать весь HTTP-глагол (POST, DELETE, PUT), вы можете использовать протокол CORS: http://www.w3.org/TR/access-control/.

CORS - это протокол, согласованный между браузером и веб-службой, который сообщает браузеру, что "ОК" выполняет код Javascript из междоменного вызова

Чтобы использовать это, вам просто нужно включить некоторые пользовательские заголовки в ответ сервера, который сообщает браузеру, что он одобрен для приема запросов перекрестных доменов. Вот сообщение в блоге, в котором объясняется, как реализовать его с RubyOnRails (но он должен быть очень похож на другие рамки...): http://www.tsheffler.com/blog/?p=428

Это самое простое решение, вы можете использовать backbone.js, как если бы вы были в том же домене, и он работает с большинством современных браузеров (Internet Explorer 8+, Firefox 3.5+, Safari 4+ и Chrome)!

Если вам нужна более старая поддержка браузера, мне удалось сделать работу с базой, используя easyXDM:

easyXDM - это библиотека Javascript, которая позволяет вам как разработчику легко обойти ограничение, установленное в соответствии с политикой Same Origin, в свою очередь, упрощая связь и раскрытие API JavaScript через границы домена.

Это немного сложнее и работает с некоторыми известными хаками iframe (которые иногда используются в виджетах javascript, таких как GMaps, facebook widgets,...).

Надеюсь на эту помощь!

Ответ 2

Поддержка JSONP для операций GET может быть добавлена ​​через опции fetch.

В том же хэше, где вы настраиваете обработчики success и error, добавьте такой объект:

{dataType: "jsonp"}

Это будет проходить по опции jsonp для JQuery ajax-обработчика, и автоматически, у вас будет поддержка JSONP для извлечения моделей/коллекций.