Javascript return 从函数引用 jqXHR
Javascript return reference to jqXHR from function
最近我使用 $.post()
方法将一堆 AJAX 调用抽象为一个函数。我的想法是使用由 $.post()
编辑的 jqXHR
对象 return 添加标准错误处理程序等(通过 .fail()
.done()
.always()
)到删除代码重复。然后我想我可以 return 从方法到原始调用函数的 jqXHR
对象,这样我就可以添加额外的处理程序来做更多特定于上下文的事情。
但是,jqXHR
对象 returned 似乎是原始对象的副本,而不是对象本身。因此,它的状态永远不会被原始调用更新,所以 none 我的附加 .done()
函数得到执行。
在JS中可以return引用一个对象吗?我有 C++ 背景,那么有没有办法模仿 JS 中的 "return pointer to object" 功能?
我知道这里有关于 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!"));
}
AJAX 函数中的 .done()
和 .fail()
可以正常执行,但是 example()
中的 .done()
永远不会执行,因为 dfrd.state()
总是 pending
原来这是时间问题。
看来,对于多个 .done()
函数,当函数收到来自 $.post()
调用的响应时,会有轻微的延迟。所以传递给 AJAX
函数的 onSuccess(resp) {}
将在 alert()
之后执行。我用来测试的特定 onSuccess
函数中有一个页面刷新调用,它会在我看到它之前关闭警报。
我有C++背景,所以我想我需要升级我的JS测试程序。
感谢所有评论的人!
最近我使用 $.post()
方法将一堆 AJAX 调用抽象为一个函数。我的想法是使用由 $.post()
编辑的 jqXHR
对象 return 添加标准错误处理程序等(通过 .fail()
.done()
.always()
)到删除代码重复。然后我想我可以 return 从方法到原始调用函数的 jqXHR
对象,这样我就可以添加额外的处理程序来做更多特定于上下文的事情。
但是,jqXHR
对象 returned 似乎是原始对象的副本,而不是对象本身。因此,它的状态永远不会被原始调用更新,所以 none 我的附加 .done()
函数得到执行。
在JS中可以return引用一个对象吗?我有 C++ 背景,那么有没有办法模仿 JS 中的 "return pointer to object" 功能?
我知道这里有关于 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!"));
}
AJAX 函数中的 .done()
和 .fail()
可以正常执行,但是 example()
中的 .done()
永远不会执行,因为 dfrd.state()
总是 pending
原来这是时间问题。
看来,对于多个 .done()
函数,当函数收到来自 $.post()
调用的响应时,会有轻微的延迟。所以传递给 AJAX
函数的 onSuccess(resp) {}
将在 alert()
之后执行。我用来测试的特定 onSuccess
函数中有一个页面刷新调用,它会在我看到它之前关闭警报。
我有C++背景,所以我想我需要升级我的JS测试程序。
感谢所有评论的人!