使用两个ajax调用将自定义标头设置为Backbone.model中的ajax调用

时间:2014-02-19 06:03:16

标签: javascript jquery ajax backbone.js

我有一个骨干模型。

var mymodel = Backbone.Model.extend({
 url: '/url'
});

var newmodel = new mymodel();

newmodel.fetch({
    beforeSend: sendheader, //I want to set a header here!
    success: function() {
       //do something here
    }
    error: function() {
      //do something else here
    }

});

这是设置标题

的方法
//This works
sendheader = function(xhr) {
   xhr.setRequestHeader("ToKEN-ID", token);
}

问题:

我想从另一个ajax调用中获取令牌

sendheader = function(xhr) {
   $.ajax({
     type: 'GET',
     url: '/gettoken',
     success:function(data) { 
       xhr.setRequestHeader("ToKEN-ID", token);
     }
   });
 }

这不起作用,因为xhr对象可能被覆盖了吗?似乎在我做了另一个ajax调用后我失去了xhr对象?如何保留第二个ajax调用的XHR对象?

1 个答案:

答案 0 :(得分:1)

sendheader是一个函数,jQuery是异步的。

所以sendheader将调用ajax get而不等待它返回它将执行下一个语句。

因此,在未设置newModel.fetch的情况下调用xhr。 - 你不能这样做。

<强>替代

首先获取令牌及其成功方法,使用您的newModel.fetch

实施例

sendheader = function(xhr) {
   var thisModel = this;
   $.ajax({
     type: 'GET',
     url: '/gettoken',
     success:function(data) { 
       thisModel.trigger('tokengot',data);
     }
   });
 }

var mymodel = Backbone.Model.extend({
 url: '/url'
});

var newmodel = new mymodel();

newmodel.on('tokengot',function(token){    

newmodel.fetch({
    beforeSend: function(xhr){xhr.setRequestHeader("ToKEN-ID", token);}, //token and xhr variable name may be inaccuate in my code
    success: function() {
       //do something here
    }
    error: function() {
      //do something else here
    }

});
}
newmodel.sendheader() // i believe send header is function of this model itself