检查函数是否是 jQuery ajax 请求

Bar*_*s41 5 javascript ajax jquery

我正在编写一个 ajax 队列,我想确保函数的类型(来自对象)实际上是一个 ajax 请求,以便 .done/.fail/.always 可以被调用。我怎样才能做到这一点?

T.J*_*der 5

我想确保函数的类型(来自对象)实际上是一个 ajax 请求,以便 .done/.fail/.always 可以被调用。

jQuery ajax 请求对象 ( jqXHR) 不是函数。在 jQuery v1.12.0(我可以方便地检查的版本)中,它们是添加了属性的普通对象(例如,没有特殊的构造函数),因此您无法使用instanceof它们来查看它们是否是jqXHR对象。

您可以测试done, fail, 和/或always是否存在于您获得的对象上:

if (obj.done && obj.fail && obj.always) {
    // It's probably a jqXHR
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想更彻底,您可以确保它们是函数:

if (typeof obj.done == "function" &&
    typeof obj.fail == "function" &&
    typeof obj.always == "function") {
    // It's probably a jqXHR
}
Run Code Online (Sandbox Code Playgroud)

这是“鸭子打字”的一个例子:它像鸭子一样嘎嘎叫,所以我们假设它是一只鸭子。

如果您想真正将其限制为jqXHR对象而不是具有这些功能的其他事物,则可以检查它们具有的其他功能/属性,例如getAllResponseHeaders等等。