【发布时间】:2014-04-07 06:11:09
【问题描述】:
我已经制作了一个 ajax 预过滤器来等待模态窗口在执行原始回调之前消失,并且效果很好......
$.ajaxPrefilter ( options, originalOptions, jqXHR )->
# perhaps these could be defined in a loop from an array
jqXHROriginaldone = jqXHR.done
jqXHROriginalfail = jqXHR.fail
jqXHR.done = ->
args = arguments
myfunc = ->
$(listener).off "ajax.progress.dismissed", myfunc
jqXHROriginaldone args
$(listener).on "ajax.progress.dismissed", myfunc
jqXHR.fail = ->
args = arguments
myfunc = ->
$(listener).off "ajax.progress.dismissed", myfunc
jqXHROriginalfail args
$(listener).on "ajax.progress.dismissed", myfunc
我不喜欢为每种状态类型重复我的代码...我想更改以便可以在循环中设置所有状态(完成/失败/等...)...
$.ajaxPrefilter ( options, originalOptions, jqXHR )->
# object to store original callbacks for later use
originals = {}
for status in ['done','fail']
originals[status] = jqXHR[status]
jqXHR[status] = ->
args = arguments
myfunc = ->
$(listener).off "ajax.progress.dismissed", myfunc
originals[status] args
$(listener).on "ajax.progress.dismissed", myfunc
对我来说它看起来像等效代码,但它失败了,并且在控制台中没有显示错误,只是没有运行回调函数。
为什么我的循环方法有效?
【问题讨论】:
-
我花了几分钟试图弄清楚这一点......找不到任何明显的东西。你有没有扔很多
console.log's 来看看发生了什么/什么时候发生的事情? -
@BradM 感谢您抽出宝贵的时间。我没有将控制台日志放在那里,但我确实在调试器中逐行检查,我可以检查的一切似乎都很好。这些函数似乎是按预期定义的,它正在调用它们,只是它似乎从未调用回调函数。显然我遗漏了一些东西 - 我怀疑 javascript 本身已经坏了。
标签: javascript jquery ajax coffeescript