【问题标题】:Using a callback with $(location).attr()使用带有 $(location).attr() 的回调
【发布时间】:2013-05-30 17:33:22
【问题描述】:

我试图在 $(location).attr() 完成时触发一个事件。例如,当 attr() 用于更改 img src 但不使用 $(location).attr() 时,我找到了许多解决方案。

你可能会问我为什么要这样做? 在我的应用程序中,我有一个将数据导出到 xml 的按钮(在后台使用 php 代码)。但是,这可能需要一些时间(几秒钟!)。因此,我想显示一个微小的“在导出过程中请稍候”,然后在生成 xlsx 并开始下载后将其删除。

这可能吗?

【问题讨论】:

  • 我想你正在使用 ajax。那么为什么不在请求之前设置加载消息并在成功/完成回调中删除此消息呢?
  • 如果您要更改的是实际的window.location,如果设置了内容配置,则会重新加载页面或开始下载,如果这是您想要做的,请解释一下更好的。另外,在 jQuery 中包装位置对象通常不是很好的形式?
  • $(location).attr('href', "/" + module + "s/export/index?type=" + params.type + "... 其他参数..." );然后在我的 php 中,我用 $objWriter->save('php://output'); 完成我的控制器。 (objWriter 是一个 PHPExcel 对象)让我下载文件。该位置不会重新加载页面
  • 你真的应该使用 window.location.href = "/" + module + "s/export/index?type=" ... 而不是 jQuery。当 Excel 文件准备好并且用户收到“下载文件”对话框时,没有任何事件可以挂钩,但是有一些方法可以通过一些技巧和 cookie 来实现,但这有点复杂,这里是 tutorial

标签: jquery attr


【解决方案1】:
$("#waitMessage").show();

$.post("processing.php", yourParameters)
    .then(function (data) {
      // handle success
    })
    .fail(function () {
      // handle server error
    })
    .always(function () {
      $("#waitMessage").hide();
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多