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 。它对我来说很好。这可能会帮助你。

当你调用 .fetch 时,model 会触发一个 request 事件,当你收到它,解析并设置到 model 时,model 会触发一个 sync 事件。

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 回答