没有JQuery的原始AJAX代码。请注意someVar
一开始的定义。
req.onreadystatechange = function() {
if (req.readyState == 4) {
//CODE HERE
var someVar = ....
//method() should be called when AJAX call returns
someVar.method();
if (req.status != 200) {
// error code
someVar.doSomething();
} else if (req.responseText) {
//other code
someVar.doSomethingElse();
}
}
};
req.send(null);
我对JQuery的最佳尝试。请注意代码重复:
$.get(url)
.done(function(data){
var someVar = ....
someVar.method();
someVar.doSomethingElse();
})
.fail(function(){
var someVar = ...
someVar.method();
someVar.doSomething();
});
无论如何都要在done
和fail
之前运行代码(这就是always
在这种情况下不起作用的原因)?
答案 0 :(得分:2)
查看jqXHR文档,done
,fail
,always
和then
应按照注册顺序调用 - 您是否尝试过将在其他函数之前always
中的共享代码?
Here's jsBin显示了这一点;一定要打开控制台。
修改强>
这有点花哨,但是如果你在父作用域中没有变量的情况下确实死机,那么你可以使用的函数之间存在一定程度的共享上下文。 jQuery ajax请求是它自己的对象,因此你可以在它之间的调用之间共享这个对象的数据。
所以,你可以像这样分享代码:
$.get()
.always(function() {
this.someVar = ...
this.someVar.doMethod();
}).done(function() {
this.someVar.doneFunction();
}).fail(function() {
this.someVar.failFunction();
})
如果你这样做,我会对我的变量约定更加谨慎 - 可能会尝试在someVar
前面添加特定于应用程序的内容(如myApp_someVar
)。