加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – jquery的promise方法如何真正工作?

发布时间:2020-12-16 03:23:37 所属栏目:百科 来源:网络整理
导读:我真的不明白这个代表和承诺的事情。根据文档,委托会绑定选择器和事件到某种包装容器,以后可以再次使用当前和未来的项目? promise()会将事情重新映射到第一次绑定时,如果新加载的所有内容都匹配?也许我真的不明白这个承诺的方法。 如果包装器仍然存在,
我真的不明白这个代表和承诺的事情。根据文档,委托会绑定选择器和事件到某种包装容器,以后可以再次使用当前和未来的项目?

promise()会将事情重新映射到第一次绑定时,如果新加载的所有内容都匹配?也许我真的不明白这个承诺的方法。

如果包装器仍然存在,但包装器容器中的内容已经更改,或者通过ajax重新加载,该怎么办?为什么破坏事件不触发或工作,因为它是第一次绑定?

是的,我一直到docs页面,我只是不理解他们的解释完全

我有点困惑的这个问题。我认为这是因为你被承诺和委托混淆。它们实际上是jQuery的完全不相关的功能。我将分别解释:

代表

delegate是在jQuery 1.4.2中引入的jQuery的一个特性。 (这是一个更好的方法,live功能,在jQuery 1.3中添加)。它解决了一个特定的问题,修改DOM,特别是与AJAX调用。

绑定事件处理程序时,将其绑定到选择。所以你可以做$(‘。special’)。点击(fn)绑定一个事件处理器到特殊类的所有成员。你绑定到那些元素,所以如果你然后从这些元素之一删除类,事件仍然会被触发。相反,如果你将类添加到一个元素(或添加一个新的元素到DOM),它不会有事件绑定。

有一个Javascript的功能,减轻这个称为“事件冒泡”。当事件被触发时,首先浏览器通知事件发生的元素。然后它向上移动DOM树,并通知每个祖先元素。这意味着您可以在DOM树上的元素上绑定事件处理程序,以及在任何子元素(即在处理程序绑定时不存在的那些)上触发的事件。

委托是jQuery的这个实现。首先,选择一个父元素。然后你指定一个选择器 – 处理程序将只运行,如果始发元素匹配这个选择器。然后指定一个事件类型,如点击,提交,键下,就像bind.然后最后指定事件处理程序。

$('#containingElement').delegate('a.special','click',function() {
    alert('This will happen on all links with the special class');
});

诺言

promise是jQuery功能集的另一个相对较近的增加。它是在jQuery 1.5中引入的Deferred概念的一部分。 (我认为“deferred”和“delegate”之间的声音的相似性可能是混淆的原因。)这是一种抽象异步代码复杂性的方法。最好的例子是使用AJAX调用,因为$ .ajax返回的对象是Deferred对象。例如:

$.ajax({
    url: 'somepage.cgi',data: {foo: 'bar'}
}).done(function() {
    // this will be run when the AJAX request succeeds
}).fail(function() {
    // this will be run when the AJAX request fails
}).always(function() {
    // this will be run when the AJAX request is complete,whether it fails or succeeds
}).done(function() {
    // this will also be run when the AJAX request succeeds
});

所以它在许多方面与$ .ajax调用中的绑定成功处理程序相同,只是您可以绑定多个处理程序,并且可以在初始调用后绑定它们。

另一个时候,异步处理是有用的是动画。你可以提供回调函数,但更好的做法是类似于上面提供的AJAX示例的语法。

在jQuery 1.6中,这个功能是可能的,promise是这个实现的一部分。在jQuery选择上调用promise,当对象中的所有动画都完成时,你将得到一个可以绑定事件处理程序的对象。

例如:

$('div.special').fadeIn(5000).promise().then(function() {
    // run when the animation succeeds
}).then(function() {
    // also run when the animation succeeds
});

再次,这在效果上类似于传统方法,但它增加了灵活性。您可以稍后绑定处理程序,并且您可以绑定多个。

概要

基本上,delegate和promise之间没有显着的关系,但它们都是现代jQuery中的有用特性。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读