Javascript 如何检查对象是否为jQuery Xhr对象
基本上,我想检查一个对象是否是jQuery XHR(jqXHR——比如由.ajax()请求返回的)——而不仅仅是一个常规的延迟对象 我已尝试检查它是否是$.Deferred的实例,因此略有不同:Javascript 如何检查对象是否为jQuery Xhr对象,javascript,jquery,Javascript,Jquery,基本上,我想检查一个对象是否是jQuery XHR(jqXHR——比如由.ajax()请求返回的)——而不仅仅是一个常规的延迟对象 我已尝试检查它是否是$.Deferred的实例,因此略有不同: xhrObj instanceOf $.Deferred //false 我在文档或代码中没有看到它是什么构造函数。。。无论如何都要这样做吗?您可以检查延迟应该具有的任何属性,例如done,fail,始终,状态,等等 done似乎是延迟对象应该具备的(承诺也具备),这在其他jQuery对象
xhrObj instanceOf $.Deferred //false
我在文档或代码中没有看到它是什么构造函数。。。无论如何都要这样做吗?您可以检查延迟应该具有的任何属性,例如
done
,fail
,始终,状态
,等等
done
似乎是延迟对象应该具备的(承诺也具备),这在其他jQuery对象中并不常见
var def = new $.Deferred();
if ('done' in def)
并检查这是否是一个承诺
var ajax = $.ajax({
url : 'something'
})
isPromise = 'abort' in ajax;
@JonathanLonowski但是xhrObj是延期的,不是一个承诺吗?请澄清。您想知道它是promise对象还是jqXHR。jqXHR是一个promise对象,但并非所有promise对象都是jqXHR对象deferred@EvanHobbs然后您应该检查getAllResponseHeaders
方法imho@A.Wolff谢谢这也是我得出的结论,不过还是和SetRequestHeaders一起谢谢!我正在使用您的方法,但我想知道它是否是jqXHR,而不仅仅是一个普通的延迟美元(我想我在我的问题中不清楚)。。。我决定检查setRequestHeader,因为jqXHR有它,但普通的承诺没有。我认为你的答案是正确的,尽管你可能想稍微更新一下答案。@EvanHobbs-是的,类似的东西应该会起作用,它似乎也有“中止”的承诺,而延期则没有?是的,但目的是告诉你它是否是一个jqXHR,而不仅仅是一个正常的延期。如果它有'done'、'fail'、'always'等,则它是一个延迟的,但不一定是一个带有附加属性的延迟jqXHR。这就是为什么我建议像“setRequestHeaders”这样的东西,只有JQXHR才有