Я хотел бы использовать Backbone.js с REST api, которым я управляю. Я надеялся, что REST api и скрипты Backbone будут жить в другом домене, но, к сожалению, это будет заблокировано, так как это междоменный запрос.
Есть ли в Backbone.js встроенная функциональность для поддержки запросов JSONP? Или, в качестве альтернативы, есть ли у кого-нибудь опыт добавления вручную поддержки JSONP в систему Backbone.js sync
?
Вы не сможете использовать весь 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, которая позволяет вам как разработчику легко обходить ограничения, установленные в соответствии с той же политикой происхождения, что, в свою очередь, упрощает взаимодействие и предоставление API-интерфейсов JavaScript через границы домена.
Это немного сложнее, и работает с некоторыми хорошо известными хараками iframe (которые иногда используются в виджетах javascript, таких как GMaps, виджеты facebook, ...).
Надеюсь, это поможет!