Javascript 用于AJAX调用的JQuery代码复制
没有JQuery的原始AJAX代码。请注意开头部分的Javascript 用于AJAX调用的JQuery代码复制,javascript,jquery,Javascript,Jquery,没有JQuery的原始AJAX代码。请注意开头部分的someVar定义 req.onreadystatechange = function() { if (req.readyState == 4) { //CODE HERE var someVar = .... //method() should be called when 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();
});
在完成
和失败
之前,是否仍要运行代码(这就是为什么在这种情况下总是
不起作用的原因) 查看文档,完成
,失败
,始终
和然后应按注册顺序调用
-您是否尝试过将共享代码放在始终
中,然后再调用其他函数
一个jsBin,在运行中显示这一点;只需确保控制台处于打开状态
编辑 这有点噱头,但是如果你真的在父范围内没有变量,那么在你可以使用的函数之间有一定程度的共享上下文。jqueryajax请求是它自己的对象,因此您可以在对该对象的调用之间共享该对象上的数据 因此,您可以像这样共享代码:
$.get()
.always(function() {
this.someVar = ...
this.someVar.doMethod();
}).done(function() {
this.someVar.doneFunction();
}).fail(function() {
this.someVar.failFunction();
})
如果你这样做的话,我会对我的变量约定更加谨慎一点——可能会尝试在
someVar
前面加上特定于应用程序的前缀(比如myApp\u someVar
) 为什么不能像以前一样使用always并测试状态代码?(提示:第二个参数是textStatus)@KevinB这完全不是一回事,他想和我分享一些东西。fail@KevinB因为它更丑陋——泡泡提供了一个更合理的解决方案。@BenjaminGruenbaum确信这与我所比较的是同一件事。@BenjaminGruenbaum和泡泡的答案实际上符合我的建议。这将如何帮助我在他们之间共享变量someVar
另外两个承诺的方法到底是什么?请参阅此提琴:@thattidotguy只有将变量存储在所有三个回调都可用的范围内(例如父范围),才有可能实现此操作。如果你想避免这种情况,你必须在一个always回调中完成所有逻辑。@KevinB这就是它看起来的样子。我喜欢新的承诺,但这似乎是该体系的一个小问题。谢谢你的建议。在这里共享父范围有那么糟糕吗?就我个人而言,我并不认为这是一个特别糟糕的形式,但意见可能会有所不同。@Thatidotguy我更新了我的答案,可能更符合你的口味。