$ .ajax调用工作,但骨干提取和保存不起作用

时间:2013-10-03 04:45:57

标签: ajax backbone.js

我有一个骨干应用程序,我对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'); 

2 个答案:

答案 0 :(得分:0)

Backbone正在使用Backbone.sync方法来执行ajax。它使用一些默认设置执行相同的jquery.ajax。这是Backbone.sync的source code。您可以将backbone的ajax设置与ajax匹配。

答案 1 :(得分:0)

我不确定你的做法。我以下面的方式使用了fetch。它对我来说很好。这可能会对你有所帮助。

当您调用.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();