Вопрос по ajax – Как сделать ajax-запрос к API, используя CORS и backbonejs

1

Я работаю над проектом backbone.js и звоню в репозиторий github. У меня загружены мои Коллекции и Модели, так что они существуют, как только моя страница построена, но когда я вызываю model.fetch (), я получаю это сообщение: (заменить: имя пользователя именем пользователя)

<code>XMLHttpRequest cannot load https://api.github.com/users/:username.
Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.
</code>

Я прочитал несколько сообщенийpost1, post2они упоминают об изменении функции backbone.sync, но я не совсем уверен, как. Вот мой код (это в моем Backbone.Router):

<code>userDetails: function(id) {
    console.log('Loading: userDetails');
    var User = Users.get(id);
    User.fetch({dataType: "jsonp"});
    console.log(User);
    userView = new UserView({
        model: User
    });
    userView.render();
},
</code>

Спасибо!

api.github.com поддерживает jsonp. В jQuery установите свой URL, чтобы включитьcallback=? и это будет работать нормально. Сделайте так, чтобы ваш URL былapi.github.com/users/toddself?callback=? и jQuery будет обрабатывать вызов jsonp и предоставлять данные для вашей функции успеха как обычно. tkone
Кроме того, дубликатAccess-Control-Allow-Origin Not Allowed by Server tkone

Ваш Ответ

2   ответа
4

когда он делает запрос кросс-источника, и соответственно изменяют его. Проблема в сервере, в данном случае,api.github.com не разрешает запросы CORS.

Сервер должен ответить (минимум):

Access-Control-Allow-Origin: * (or the host in which your page is being served)

Поскольку вы, скорее всего, не являетесь владельцем github, вам придется либо написать прокси на стороне сервера, либо посмотреть, может ли github предоставить вам вызов JSONP (что jQuery с удовольствием сделает для вас).

Документация MDN по контролю доступа

EDIT

При этом, если вам нужно изменить запрос, сделанный jQuery через магистраль, нет необходимости переопределятьsync метод. использованиеJQuery & APOS; s$.ajaxSetup метод добавления любых дополнительных заголовков, типов набора и т. д. Просто убедитесь, что вы запустите$.ajaxSetup метод в том же контексте или замыкании, что и.save(), .fetch() или же.destroy() будет работать, или вы не получите работу, выполняемую в$.ajaxSetup

0

алmod_proxy. Please refer to: http://blog.lakmali.com/2010/11/apache-proxy-configuration-and-load.html Это сообщение в блоге довольно ясное и прямое.

mod_proxy поддерживает & quot; https & quot; однако, я сам еще не пробовал! Пожалуйста, Google, чтобы прочитать о Proxy-вариантах, таких как mod_proxy, mod_jk и т. Д.

При использовании mod_proxy нам больше не нужно совершать кросс-доменные вызовы. Следовательно, не было необходимости беспокоиться о IE8 / IE9.XDomainRequest взломать для выполнения междоменных запросов. [NoteПеред использованием * mod_proxy * мы пытались перегрузить Backbone.sync, чтобы сделать явные вызовы XDomainRequest вместо jQuery.ajax для того, чтобы позаботиться о проблемах CORS на IE9!]

Похожие вопросы