0

每当我点击我网站上执行/调用 GET 或 POST(Ajax 和非 Ajax)的任何地方的链接/按钮时,如果需要几秒钟以上的时间,我想显示一个加载 gif。我知道如何单独执行此操作,但我想知道是否可以创建一个自动执行此操作的函数,然后在完成时隐藏 gif(假设它不会重定向到新页面)。

我发现了这一点,但这不适用于例如 spring security 的 post 方法。

这可能是不可能的情况,或者需要付出比其价值更多的努力。我只想知道这是否可能,如果可能,如何处理。

唯一的限制是任何调用 post 或 get 的方法都不需要知道这个所谓的“监听器”。

4

1 回答 1

3

这被标记为 jQuery,所以为了简单起见,我给出了一个 jQuery 答案。没有它,这也可以以相对简单的方式解决。

钩住每个请求:

假设您的方法被调用myMethod

GET/POST可以通过以下方式触发请求:

  • 表单提交,在这种情况下您可以选择表单$("#formID").submit(myMethod);。请注意,如果myMethod返回 false 将导致您的表单无法提交
  • AJAX在这种情况下,您可以$.ajaxStart 使用$.ajaxStart(myMethod)
  • “a”标签点击和其他点击处理程序,在这种情况下您可以执行$("a[href]").click(myMethod),请注意,这会选择a具有href属性的所有标签,您可能需要更改选择器以满足您的需要
  • Image您可以像这个问题中解释的那样处理的负载。
  • Script您可以像这个问题中解释的那样检测到的负载。
  • Stylesheet/Link负载,这在此博客文章中进行了解释。您可以向 CSS 添加隐藏元素并检查样式是否在间隔中应用,以及何时调用myMethod

你不能做什么:

  • 如果你的页面有一个像 Flash 这样的插件,或者任何你的 JavaScript 无法访问的东西,你就不能钩住它发出的请求。

显示“正在加载”的 gif 的情况。

根据您的要求,您似乎只关心图像请求和 AJAX 请求(如果我错了,请纠正我),因为在 AJAX 请求中加载 NOT 需要很长时间的外部页面可以(应该)实现.gif新页面上的逻辑。这可以像我上面解释的那样处理。

虽然你可以钩住每一个案例,但我不会这样做。我会创建一个方法,将“正在加载”的 gif 加载到一个地方并接受一个 url。如果该 url 是一个图像(例如,如果您的映射可以通过文件扩展名)使用image load detect 链接问题中的逻辑,如果它是 AJAX,则将加载 gif 加载到将加载数据的位置,并将其替换为上的数据一个.done()处理程序。

Here is a question about how to do this for an image, here is how to do it for AJAX . The two can be easily combined into a method which is what I believe you should use.

于 2013-03-29T11:26:47.130 回答