Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于AJAX调用的JQuery代码复制_Javascript_Jquery - Fatal编程技术网

Javascript 用于AJAX调用的JQuery代码复制

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

没有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();
    });
完成
失败
之前,是否仍要运行代码(这就是为什么在这种情况下
总是
不起作用的原因)

查看文档,
完成
失败
始终
然后应按注册顺序调用
-您是否尝试过将共享代码放在
始终
中,然后再调用其他函数

一个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我更新了我的答案,可能更符合你的口味。