javascript - jQuery:链接动画和 AJAX 请求

标签 javascript jquery chaining jquery-deferred

我有一个产品列表页面,我想通过 AJAX 加载每个产品的详细信息 View 并将其显示在页面中。我有一组更复杂的条件,我想设置动画,但我会在这里保持简单。

基本上,点击后,我想运行 AJAX 请求并同时制作动画(在某些情况下,一系列动画......)内容包装器打开并显示“加载”状态。一旦这两个都完成了,我就想加入并为内容制作动画。我认为 jQuery Deferred Objects 是可行的方法,但我对它们没有很好的理解,而且我的尝试并没有让我达到我想要的目的。

我试过这样的:

var dfr = $.Deferred();
dfr.then(function() { return wrapper.fadeIn(5000); });

$.when(dfr, $.get('/detail.html'))
.then(function() {
    console.log('All done, run additional animations...');
});

dfr.resolve();

...但是一旦 AJAX 请求完成它就会被触发,即使动画仍在运行也是如此。

我也试过这个:

var dfr = $.Deferred();
dfr.then(function() { return wrapper.fadeIn(5000); });
dfr.then(function() { return $.get('/detail.html'}) });
dfr.done(function() { console.log('All done, run additional animations...'); });
dfr.resolve();

...但这只会同时执行所有 then/done 调用。我还尝试切换 pipe 来代替 then 调用,但无济于事。

我很想了解延迟对象(这甚至是它们的适当/预期用途吗..?),当然,我还想了解如何实现此页面的目标。非常感谢任何帮助或提示....

最佳答案

This page有一个完全按照你所说的做的例子: http://www.erichynds.com/jquery/using-deferreds-in-jquery/

更像是这样:

function animateStuff() {
   var dfd = $.Deferred();
   wrapper.fadeIn(5000, dfd.resolve); 
   return dfd.promise();
}

$.when( animateStuff(), $.get("/whatever") )
   .then(function() {
      // do something really great
})

关于javascript - jQuery:链接动画和 AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936427/

相关文章:

jquery - 居中 GridView css 和不同的窗口大小

jquery - 带有使用图像的水平第二层的水平导航栏

javascript - IE 9、10、11 - Ajax 调用不返回

java - Java 中的构造函数链和可见性

php - 过早收集资源垃圾

javascript - trim Bootstrap 表单元格中的文本

javascript - 子目录中的 npm run 命令

javascript - 类实现怎么做?

javascript - 在 promise 之外抛出错误

jquery - 为什么我可以关闭 mousedown 事件,但不能关闭其链接的 mouseup 事件?