0

PHP API に対して行う $.ajax() 呼び出しがうまく機能し、GET または POST 要求で成功を返すバックボーン アプリがあります。ただし、(同じエンドポイントを使用して) model.fetch() または model.save() 呼び出しを試みると、次のように返されます。

XMLHttpRequest cannot load http://xyz.com.
Origin http://localhost is not allowed by Access-Control-Allow-Origin.

私はそれが大したことではないことを知っていますが、バックボーンの ajax 呼び出しがエラーで返される理由はありますが、単純な ajax 呼び出しに変換すると成功しますか?

サーバー上の PHP ベースの API のヘッダーは次のとおりです。

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true"); 
header('Access-Control-Allow-Headers: origin, content-type, accept');
header('Access-Control-Allow-Methods: OPTIONS, POST, GET, DELETE, PUT');
header('Access-Control-Max-Age: 86400'); 
4

2 に答える 2

0

Backbone はBackbone.syncメソッドを使用して ajax を実行します。jquery.ajaxいくつかのデフォルト設定で同じことをしています。これはBackbone.syncのソース コードです。バックボーンの ajax 設定を ajax と一致させることができます。

于 2013-10-03T10:39:30.193 に答える
0

あなたのアプローチについてはよくわかりません。以下の方法でフェッチを使用しました。それは私にとってはうまくいきました。これはあなたを助けるかもしれません。

.fetch を呼び出すと、モデルはリクエスト イベントをトリガーし、それを受信して​​解析し、モデルに設定すると、モデルは同期イベントをトリガーします。

var UserModel = Backbone.Model.extend({ url:' http://api.geonames.org/astergdemJSON?formatted=true&lat=50.01&lng=10.2&username=demo&style=full ' });

var MyView = Backbone.View.extend({
    initialize: function() {
        this.model = new UserModel();
        this.listenTo(this.model,'sync', this.render);
        this.model.fetch({success:this.success,error:this.error});
    },
    render: function() {
        console.log('do awesome stuff here'+this.model.toJSON());
    },
    success:function(data){
        console.log(data.attributes.status);
    },
    error:function(data){
        console.log('error'+data.attributes.status)
    }
});

var view = new MyView();
于 2014-04-08T11:59:46.047 に答える