我正在编写一个 ajax 队列,我想确保函数类型(来自对象)实际上是一个 ajax 请求,以便可以在其上调用 .done/.fail/.always。我该怎么做?
最佳答案
I want to ensure that the type of function (comes in an object) is in fact an ajax request so that .done/.fail/.always can be called on it.
jQuery ajax 请求对象 (jqXHR
) 不是函数。在 jQuery v1.12.0(我方便检查的版本)中,它们是添加了属性的普通对象(例如,没有特殊的构造函数),因此您不能使用 instanceof
来查看它们是否“重新 jqXHR
对象。
您可以测试您获得的对象上是否存在done
、fail
和/或always
:
if (obj.done && obj.fail && obj.always) {
// It's probably a jqXHR
}
或者如果你想更彻底,你可以确保它们是函数:
if (typeof obj.done == "function" &&
typeof obj.fail == "function" &&
typeof obj.always == "function") {
// It's probably a jqXHR
}
这是“鸭子打字”的一个例子:它叫起来像鸭子,所以我们假设它是鸭子。
如果你真的想尽可能地限制它到 jqXHR
对象而不是其他具有这些功能的东西,你可以检查它们具有的其他功能/属性,例如 getAllResponseHeaders
等。
关于javascript - 检查函数是否为 jQuery ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134768/