最近,我使用$.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
答案 0 :(得分:0)
所以这结果是一个时间问题。
似乎有多个.done()
函数,当函数收到$.post()
调用的响应时会有轻微的延迟。因此,传递给onSuccess(resp) {}
函数的AJAX
将在alert()
之后执行。我用来测试的特定onSuccess
函数中有一个页面刷新调用,它会在我看到之前关闭警报。
我有C ++背景,所以我想我需要升级我的JS测试程序。
感谢所有评论的人!