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
将调用ajaxget
并在不等待其返回的情况下执行下一条语句
因此,将调用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