jQuery如何知道是否会有一个回调附加到ajax承诺?



我已经使用了多年了,但是我意识到我不了解一些非常基本的东西。在jQuery中,您可以这样打电话:

$.post({url: url, success: callback})

和jQuery将在帖子完成后调用回调方法。

,但您也可以以这样的承诺语法来完成它:

$.post(url).done(callback)

令人困惑的是:post方法是否有效,无论是否附加了done回调,那么它如何知道有一个呢?

换句话说,如果您必须这样做,我可以理解:

1 var jqxhr = $.post(url)
2 jqxhr.done(callback)
3 jqxhr.execute()

但不需要第3行。那么,post如何在没有任何明确的execute调用的情况下执行,但如果有一个>>

,请调用done回调。

jQuery返回承诺对象。这立即发生(Ajax是异步,因此收益将立即发生,而Ajax调用的结果通常会延迟至少少量时间)。

当您致电.done()时,您实际上是在从Ajax返回的承诺上调用该诺言。

如果您选择不这样做,那么jQuery根本不在乎,它只是执行AJAX请求,并(最终)解决或拒绝承诺对象。它不知道,也不需要知道,您是否选择听听。

总而言之,"完成" 在现实中不会附加"以后",尽管从表面上讲,代码的书面方式可以给您留下印象。

最新更新