请问backbone.js如何发起一个带有特定header请求参数的URL资源请求?

这个标题有点绕口,举个简单例子,我设置一个合集并发起一个posts请求来获取数据,如下:

var student = Backbone.Model.extend({
    defaults: {
        Code: '10001',
        Name: '张三',
        Score: 100
    }
});

var stulist = Backbone.Collection.extend({
    model: student,
    url: 'api/create.php'
});

var stus = new stulist();
stus.create({
    Code: '10107',
    Name: 'Lee',
    Score: 750
});

这段代码建立一个模型,带有参数Code、Name、Score,向api/create.php发起请求

如果我想加一个请求参数,例如:action,而不修改模型中固定的三个属性(如果是get请求,可以是api/create.php?action=3),请问POST请求如何做到?

阅读 5.3k
1 个回答

我不太确定你要解决的问题是什么,所以提供的答案不一定能够满足你的需求

两种可以尝试的方法,设置collection的beforeSend方法,比如:

var student = Backbone.Model.extend({
    defaults: {
        Code: '10001',
        Name: '张三',
        Score: 100
    }
});
var stulist = Backbone.Collection.extend({
  model: student,
  url: 'api/create.php'
});

var setHeader = function (xhr) {
  xhr.setRequestHeader('X-Parse-Application-Id', 'aqLJlmE2rRXBOy***************');
  xhr.setRequestHeader('X-Parse-REST-API-Key', 'gvT2Isd5vAvjgq*****************');
}

var stus = new stulist();
stus.create({
    Code: '10107',
    Name: 'Lee',
    Score: 750
},{
    beforeSend: setHeader
});

或者如果是一个更为普遍的情况的话,你也可以尝试整个override sync这个方法。

var sync = Backbone.sync;
Backbone.sync = function(method, model, options) {
  options.beforeSend = function (xhr) {
    xhr.setRequestHeader('X-Parse-Application-Id', 'aqLJlmE2rRXBOy***************');
    xhr.setRequestHeader('X-Parse-REST-API-Key', 'gvT2Isd5vAvjgq*****************');
  };

  // Update other options here.

  sync(method, model, options);
};

只是提供个思路,希望能对你有帮助哈~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题