从Backbone.js发送发布请求会返回跨域错误

时间:2016-03-14 11:29:34

标签: javascript backbone.js

我使用express.js作为后端,使用backbone.js作为前端,使用MongoDB作为数据库。根据我传入的params获取单个帖子或帖子集合没有问题,但每当我尝试POST请求时,我都会收到错误。我已经厌倦了在我的模型上调用.save()但是,我得到了一个跨站点域错误。 这是我的代码的一部分

var Post = Backbone.Model.extend({
  url: "/posts/new"
});

var Posts = Backbone.Collection.extend({
  url: "/categories/all"
});

var PostView = Backbone.View.extend({
  model: new Post(),
  template: JST["post"],
  new_template: JST["new_post"],
  el: $(".page"),

  events: {
    "click .to_category": "updateCurrentCategory",
    "submit .new_post": "create"
  },

  create: function (e){
    e.preventDefault();
    showLoader();
    console.log("subbmited");
    this.model.save();
    hideLoader();
  }
}

1 个答案:

答案 0 :(得分:0)

您需要在express.js应用程序标题部分中包含跨域策略:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");  
  next();
});

app.get('/', function(req, res, next) {
  // Handle the get for this route
});

然后,如果您使用ajax请求提交发布数据,则必须将crossDomain设置为true

  

如果您希望强制执行跨域请求(例如JSONP)   domain,将crossDomain的值设置为true。这允许,为   例如,服务器端重定向到另一个域。 (版本添加:   1.5)

http://api.jquery.com/jquery.ajax/

$.ajax({
    type: 'POST',
    url: 'your/url',
    crossDomain: true, // set it to `true`
    dataType: 'json',
    success: function(responseData, textStatus, jqXHR) {
        console.log('success');
    },
    error: function (responseData, textStatus, errorThrown) {
        alert('POST failed.');
    }
});