1

私は backbone.js プロジェクトに取り組んでおり、github リポジトリを呼び出しています。コレクションとモデルがブートロードされているため、ページが構築されると存在しますが、model.fetch() を呼び出すと、次のメッセージが表示されます: (:username をユーザー名に置き換えます)

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

post1post2といういくつかのメッセージを読みました。backbone.sync関数の変更について言及されていますが、その方法は完全にはわかりません。これまでのコードは次のとおりです (これは Backbone.Router にあります)。

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();
},

ありがとう!

4

2 に答える 2

4

CORS はバックエンドで有効になっています。jQuery の基盤は、クロスオリジン リクエストをいつ作成するかを認識し、それに応じて変更します。問題は、この場合、サーバーapi.github.comが CORS 要求を許可しないことです。

サーバーは(最低でも)次のように応答する必要があります。

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

github を所有していない可能性が高いため、サーバー側のプロキシを作成するか、github が JSONP 呼び出しを提供できるかどうかを確認する必要があります (jQuery も喜んで作成します)。

アクセス制御に関する MDN ドキュメント


編集

そうは言っても、バックボーンを介して jQuery によって行われたリクエストを変更する必要がある場合、syncメソッドをオーバーライドする必要はありません。jQuery の$.ajaxSetupメソッドを使用して、追加のヘッダーを追加したり、型を設定したりします。 ,またはが実行さ$.ajaxSetupれるのと同じコンテキストまたはクロージャーでメソッドを実行することを確認してください。.save().fetch().destroy()$.ajaxSetup

于 2012-04-05T21:02:37.640 に答える
0

最近同様の問題が発生し、mod_proxyを使用することになりました。http://blog.lakmali.com/2010/11/apache-proxy-configuration-and-load.htmlを参照してください。 このブログ投稿は非常に明確で、簡単にフォローできます。

mod_proxyは「https」もサポートしていますが、私はまだ試していません。プロキシについてもっと読むためにグーグルしてください-mod_proxy、mod_jkなどの選択。

mod_proxyを使用することで、クロスドメイン呼び出しを行う必要がなくなります。したがって、クロスドメインリクエストを実行するためのIE8/IE9のXDomainRequestハックについて心配する必要はありませんでした。[注:* mod_proxy *を使用する前は、IE9でのCORSの問題を処理するために、Backbone.syncをオーバーライドして、jQueryのajaxではなくXDomainRequestを明示的に呼び出そうとしていました。]

于 2012-04-06T03:47:30.807 に答える