Javascript从函数返回对jqXHR的引用

时间:2017-07-11 15:32:30

标签: javascript jquery jquery-deferred

最近,我使用$.post()方法将一堆AJAX调用抽象为函数。我的想法是使用jqXHR返回的$.post()对象添加标准错误处理程序等(通过.fail() .done() .always())来删除代码重复。然后我认为我可以将jqXHR对象从方法返回到原始调用函数,因此我可以添加其他处理程序来执行更多特定于上下文的操作。

但是,返回的jqXHR对象似乎是原始对象的副本,而不是对象本身。因此,它的状态永远不会被原始调用更新,因此我的其他.done()函数都不会被执行。

是否可以在JS中返回对象的引用?我有一个C ++背景,所以有没有办法模仿JS中的“返回对象指针”功能?

我知道这里有关于pass-by-reference/value的讨论,但我找不到专门处理Deferred个对象的问题

编辑:示例代码

function AJAX(url,data,onSuccess) {
    var jqxhr = $.post({url,data});
    jqxhr.done(onSuccess);
    jqxhr.fail(displayError());
    return jqxhr;
}
...
function example() {
    var dfrd = AJAX("example.php",data,successFunc);
    dfrd.done(alert("Hello, World!"));
}

.done()& AJAX函数中的.fail()正常执行,但.done()中的example()永远不会执行,因为dfrd.state()总是pending

1 个答案:

答案 0 :(得分:0)

所以这结果是一个时间问题。

似乎有多个.done()函数,当函数收到$.post()调用的响应时会有轻微的延迟。因此,传递给onSuccess(resp) {}函数的AJAX将在alert()之后执行。我用来测试的特定onSuccess函数中有一个页面刷新调用,它会在我看到之前关闭警报。

我有C ++背景,所以我想我需要升级我的JS测试程序。

感谢所有评论的人!