Backbone.js с RestAPI

Аз съм ноуб в javascript и специално Backbone.js Следя това урок и промени моделите и URL адресите, за да моите собствени услуги за почивка (JaxRS). Въпреки това, при стартиране на приложението в браузър (Chrome) ми дава следната грешка XMLHttpRequest cannot load http://localhost:1232/abc. Origin null is not allowed by Access-Control-Allow-Origin

При търсене на някои решения за тази грешка,

  1. Прочетох публикация на SO за стартиране на chrome с параметрите --allow-file-access-from-files – Въпреки това, не съм сигурен за този метод. И аз също не можах да опитам това поради някои причини.
  2. Също така прочетох, че в обикновения javascript подобни проблеми обикновено се обработват с помощта на xmlDomainObject. Но това не е случаят с гръбнака.

Така че това, което търся, е някакъв метод, чрез който мога да разреша проблема чрез самия гръбнак. Също така не разбирам защо този вид проблем не е разгледан в нито един от уроците за използване на backbone с 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. Зареждате страницата с file:/// URL и проблемът е 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
Backbone не поема никаква отговорност за Cross Origin Request. Трябва да погледнете документацията или основния изходен код. - person S.C.; 30.01.2013
comment
Наистина не е необходимо да отменяте който и да е метод или да използвате jsonp. Ако не искате да стартирате уеб сървър, който да обслужва страниците, все още можете да разрешите заявки за кръстосан произход на вашия REST API, както споменах в отговора си. Ако и вие не искате да правите това, можете да използвате jsonp. - person codemonkey; 30.01.2013
comment
Причината, поради която избрах jsonp, вместо да променя кода на сървъра, е защото искам клиентът да се справи с проблема. Нека изясня какво се опитвам да изградя тук. Това е приложение за phonegap с гръбнак за MVC с JQM за UI. Сървърът изпълнява JaxRS. И аз съм нов във всички технологии, тъй като наскоро преминах от android. Ако имате други предложения, с радост ги приветствам. Колкото повече аспекти покривам, толкова по-добре мога да променя тези компоненти. - person Himanshu Soni; 30.01.2013
comment
Отговорът е актуализиран - не е необходимо да отменяте методите за приложение PhoneGap - person codemonkey; 31.01.2013

Можете да използвате JSONP във вашето ajax повикване, което позволява кръстосани заявки за произход

Прочетете повече на тук и тук

РЕДАКТИРАНЕ:

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

това, това и това може да се окаже полезно :)

person Mandeep Jain    schedule 30.01.2013
comment
Проблемът е решен с помощта на jsonp. Въпреки че опитът за jsonp връща xml, но кара ресурсът да се интерпретира като скрипт, но прехвърлен с MIME тип application/xml. грешка. Някакви насоки? Проверих отговора на сървъра, няма проблеми от тази страна. - person Himanshu Soni; 30.01.2013