- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 jQuery 中,如何仅在所有 .done 或 .fail 处理程序之后才触发 .always 处理程序?
例如,如果我有一个返回延迟的函数,如下所示:
function getDeferred() {
return $.ajax({
url: '/test.json',
type: 'GET',
dataType: 'json',
cache: false
}).fail(function (jqXHR, textStatus, errorThrown) {
alert('fail !');
}).always(function (jqXHR, textStatus, errorThrown) {
alert('always !');
});
}
我可以有一个全局 .always 处理程序并附加一个特定的 .done 处理程序,如下所示:
getDeferred().done(function (data, textStatus, jqXHR) {
alert('done !');
});
在 jQuery 中,处理程序的调用顺序似乎与我们附加它们的顺序相同。就我而言,.总是在.done之前。
最佳答案
In jQuery, handlers seem to be called in the same order we attach them. In my case, .always before .done
当延迟被解决或拒绝时,回调将按照添加的顺序执行。
jQuery eferred.always Documentation
因此,getDeferred
中的处理程序在附加 .done
之前执行是有意义的
Is there any tricks to do what I want to do ?
我不知道是否有特定的延迟对象方式,但您可以将附加处理程序作为参数传递并根据需要执行它们。
下面的内容可能看起来很复杂,很可能有更好的方法,但它应该可行。
function getDeferred(handlers) {
var defaultHandlers = {
done: {},
fail: {},
always:{},
}
var _handlers = $.extend({}, defaultHandlers, handlers);
return $.ajax({
url: '/test.json',
type: 'GET',
dataType: 'json',
cache: false
}).done(function(jqXHR, textStatus, errorThrown) {
if ($.isFunction(_handlers.done)) {
_handlers.done();
}
}).fail(function(jqXHR, textStatus, errorThrown) {
alert('fail !');
if ($.isFunction(_handlers.fail)) {
_handlers.fail();
}
}).always(function(jqXHR, textStatus, errorThrown) {
alert('always !');
if ($.isFunction(_handlers.always)) {
_handlers.always();
}
});
}
然后这样调用它:
var handlers = {
done: function(data, textStatus, jqXHR) {
alert('done !');
}
}
getDeferred(handlers);
这将根据您的需要在 .always
之前执行您的 .done
。好处是,如果您仍然希望在 getDeferred()
完成后执行某些操作,您仍然可以执行 getDeferred(handlers).done(...)
关于javascript - jQuery 在所有附加的 .done/.fail 处理程序之后触发 .always 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293739/
我的代码有问题。它总是忽略if(userDigit=1).. 谁能告诉我这里出了什么问题? for(i=0; i=1) { //
我正在尝试从字符串 html_doc 中提取 id=obj1 并尝试将 onclick 函数 附加到它 document.addEventListener("DOMContentLoaded", fu
我正在尝试使用 css 动画来动画化从一个类到另一个类的变化。基本思想是在用户单击按钮时为从一个边缘滑动到另一个边缘的 slider 设置动画。 到目前为止我的代码。 https://jsfiddle
我目前面临使用前后伪元素淡入导航项的问题。 当我悬停导航项时,它必须将其背景颜色从白色更改为蓝色。没什么疯狂的。但它也必须显示两个背景图像,分别通过将::before 伪元素从 0 更改为 1 和::
有没有简单的方法可以在最近的sqlite版本中修改表,使其与预定义的架构匹配? 架构: war_id INTEGER NOT NULL, clanname VARCHAR(64), clanhomep
我该如何将我的搜索结果变成这样的: http://i.stack.imgur.com/NfPGs.png 结果显示特定术语在单元格中的位置。 我目前有这个基本的搜索脚本: $terms =
我正在尝试使用按钮创建输入字段。但我想要的是,当创建输入字段时,我想用相同的按钮隐藏创建的输入字段。我尝试了 slideToggle 函数,但效果不是很好。 $('#addEmail').one('
我想做这样的事情: Reference of image. 我所做的:两个 UIImagesView,一个带有 UIViewContentModeLeft,另一个带有 UIViewContentMod
我在使用应该修复表中列的插入触发器时遇到了问题: id - auto increment int thread_id - int [NULL] 我想要实现的是将 thread_id 设置
我使用 tinter.after() 每 200 毫秒 刷新一次树莓派上模拟时钟的显示。一开始还可以,但逐渐地,每次刷新之间的时间达到大约 2-3 秒。是否有任何解决方案可以将刷新间隔保持在 200m
我有一个按钮,它使用::after 伪来填充背景。目前它从左到右填充,这在宽度从 0 到 100% 时有意义。但是,我希望它翻转它填充的方式。 a.project--link { margin:
我正在尝试添加带有伪元素:after的下划线来注释一些文本。 我的问题是,我想强调下划线。在此示例中,这是短语“实际上确实可以...”和“ ...不起作用”。 .test { margin-top
鉴于此: This is a test It is 有没有我可以应用到 的 CSS?那它会出现在“This is...”之前,并且在 PREVIOUS LINE 之前吗? float:left; d
我正在使用链接左侧的图像。 现在,我使用图像的::before 属性来显示,但它显示在链接的上方。 我需要对齐它。这是一张照片: Link 我使用的代码是: .vocabulary-duration
我有一个页脚有 与 6 body {background:#bbb;} .main-footer a::after { content: " | "; color: white; mar
我有一个父元素和一些子元素,但我不能直接更改它们的 CSS。所以,我试图在父元素的 CSS 中更改我 child 的 CSS。示例: .parent { & .child {
我可以 div:after { content: "hello" } 但我能否为 hello 文本添加标题,以便当我用鼠标悬停它时显示标题? 谢谢 最佳答案 你不需要伪元素: p { ba
CSS 2.1 :after 和 CSS 3 ::after 伪选择器(除了 ::after 旧浏览器不支持)?是否有任何实际理由使用更新的规范? 最佳答案 这是伪类与伪元素的区别。 除了 ::fir
「掏出钥匙开门,然后在黑暗中摸索着墙壁开关的位置,最后将室内的灯点亮。」 这是一个星期之前,我每天晚上下班回家时的固定戏码,也可能是大部分人每天回家时的经历。这种「一对一」的日常琐碎还有许多许
我正在尝试包装 , ,和具有 的元素修复我无法直接编辑的表单上的某些定位。由于某种原因,当我尝试使用以下代码时: $("label").before(""); $("input[type=tex
我是一名优秀的程序员,十分优秀!