Backbone.js с RestAPI

Я новичок в javascript и особенно Backbone.js я слежу за этим tutorial и настроил модели и URL-адреса для мои собственные службы отдыха (JaxRS). Однако при запуске приложения в браузере (Chrome) выдает следующую ошибку XMLHttpRequest cannot load http://localhost:1232/abc. Origin null is not allowed by Access-Control-Allow-Origin

При поиске некоторых решений по этой ошибке,

  1. Я прочитал пост на SO, чтобы запустить хром с параметрами --allow-file-access-from-files – Однако я не уверен в этом методе. И я не мог попробовать это по некоторым причинам.
  2. Также я читал, что в простом javascript такие проблемы обычно решаются с помощью xmlDomainObject. Но это не относится к позвоночнику.

Итак, что я ищу, так это какой-то метод, с помощью которого я могу решить проблему через саму магистраль. Также я не понимаю, почему такого рода проблемы не рассматривались ни в одном из руководств по использованию магистрали с RestApi.


person Himanshu Soni    schedule 30.01.2013    source источник
comment
Если на вашем компьютере установлен python, вы можете создать небольшой веб-сервер, зайдя в свой каталог и набрав python -m SimpleHTTPServer, поэтому этот каталог должен быть доступен в разделе localhost:8080 и в полной мере используйте протокол http.   -  person S.C.    schedule 30.01.2013


Ответы (2)


Это не имеет никакого отношения конкретно к Backbone. Вы загружаете страницу с URL-адресом file:///, и проблема заключается в запросе AJAX Cross Origin.

Есть способы обойти это - вы можете загружать свои веб-страницы через свой сервер, на котором запущены службы REST. В качестве альтернативы вы можете разрешить запросы из разных источников. Я позволю вам поискать, как это сделать.

РЕДАКТИРОВАНИЕ Если вы разрабатываете приложение PhoneGap, у вас не возникнет этой проблемы после того, как вы фактически запустите приложение, поскольку оно не будет жаловаться на запросы из разных источников. В этот момент это локальное приложение, поэтому запрос не является перекрестным. Способ обойти это во время разработки - это флаг --allow-file-access, который, как вы сказали, не может работать. Вам нужно обязательно закрыть все другие открытые окна Chrome, а затем запустить новый экземпляр с этим флагом.

person codemonkey    schedule 30.01.2013
comment
Причина, по которой я сомневаюсь в магистрали, заключается в том, что во всех учебниках, на которые я ссылался, я не мог найти никаких вызовов ajax. Итак, я предположил, что магистраль обрабатывает запросы перекрестного происхождения. Я нашел способ, мне пришлось переопределить collections.fetch и использовать вызов ajax с типом данных как jsonp. - person Himanshu Soni; 30.01.2013
comment
Магистраль не берет на себя какие-либо запросы на кросс-происхождение. Вы должны взглянуть на документацию или исходный код магистрали. - person S.C.; 30.01.2013
comment
Вам действительно не нужно переопределять какой-либо метод или использовать jsonp. Если вы не хотите запускать веб-сервер для обслуживания страниц, вы все равно можете разрешить перекрестные запросы к вашему REST API, как я уже упоминал в своем ответе. Если вы тоже не хотите этого делать, вы можете использовать jsonp. - person codemonkey; 30.01.2013
comment
Причина, по которой я выбрал jsonp вместо изменения кода на сервере, заключается в том, что я хочу, чтобы клиент справился с проблемой. Позвольте мне пояснить, что я пытаюсь построить здесь. Это приложение телефонной связи с магистралью для MVC с JQM для пользовательского интерфейса. Сервер реализует JaxRS. И я новичок во всех технологиях, так как недавно перешел с Android. Если у вас есть другие предложения, я с радостью приветствую их. Чем больше аспектов я охватываю, тем лучше я могу настроить эти компоненты. - person Himanshu Soni; 30.01.2013
comment
Ответ обновлен - вам не нужно переопределять методы для приложения PhoneGap - person codemonkey; 31.01.2013

Вы можете использовать JSONP в своем ajax-вызове, который позволяет выполнять запросы перекрестного происхождения.

Подробнее читайте на здесь и здесь

ИЗМЕНИТЬ :

При использовании jsonp ожидается возврат объекта json, и он не работает с xml. Так что, возможно, вам нужно обернуть свой XML в json перед отправкой с сервера или проанализировать ваш xml в json.

это, это и this может оказаться полезным :)

person Mandeep Jain    schedule 30.01.2013
comment
Проблема решена с помощью jsonp. Хотя попытка jsonp возвращает xml, но приводит к тому, что ресурс интерпретируется как Script, но передается с типом MIME application/xml. ошибка. Любые указатели? Я проверил реакцию сервера, с этой стороны проблем нет. - person Himanshu Soni; 30.01.2013