AJAX调用的JQuery代码复制

时间:2013-12-02 20:55:29

标签: javascript jquery

没有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();
    });

无论如何都要在donefail之前运行代码(这就是always在这种情况下不起作用的原因)?

1 个答案:

答案 0 :(得分:2)

查看jqXHR文档,donefailalwaysthen应按照注册顺序调用 - 您是否尝试过将在其他函数之前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)。