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

前端之家收集整理的这篇文章主要介绍了ajax – jquery的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中的有用特性。

原文链接:https://www.f2er.com/ajax/160961.html

猜你在找的Ajax相关文章