我有一个骨干模型。
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对象?
答案 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