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

Javascript 使用两个ajax调用将Backbone.model中的自定义头设置为ajax调用,javascript,jquery,ajax,backbone.js,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

我有一个骨干模型

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对象?

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

因此,
sendheader
将调用ajax
get
并在不等待其返回的情况下执行下一条语句

因此,将调用
newModel.fetch
,而不设置
xhr
-你不能这样做

备选方案

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


否决票?我错过什么了吗?谢谢Akshay。我很感激!
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