如何在每次 a4j AJAX 响应后调用 JavaScript 函数?
我正在使用 JSF w/Seam 开发一个 Web 应用程序。我希望能够在每次 ajax 响应后调用 JavaScript 函数。我正在寻找一种方法来做到这一点,而不需要在每个页面上的每个 commandLink/commandButton 上放置 oncomplete 属性。
我认为有一种方法可以设置 servlet 过滤器(拦截器?我对术语感到困惑)以将 JS 调用注入到每个响应中。我要调查一下。与此同时,如果有人有任何其他建议,我会洗耳恭听。
编辑:我认为 jQuery ajaxSuccess 方法可能是这里的方法,但我不确定如何实际使用它。我无法注册任何东西。我基本上想添加代码来获取来自任何来源的所有 ajax 请求,以便在成功时调用我的 JavaScript 方法。谁能告诉我正确的方法来做到这一点?我尝试了多种方法来执行此操作,包括将 jQuery("*").ajaxSuccess(function(){myFunction();}); 添加到我的模板 xhtml 文件的底部。
I am working on a web app using JSF w/Seam. I want to be able to call a JavaScript function after every ajax response. I'm looking for a way to do this without putting an oncomplete attribute on every commandLink/commandButton on every page.
I think there's a way to set up a servlet filter (interceptor? I get the terms confused) to inject the JS call into each response. I'm going to look into that. In the meantime, if anyone has any other suggestions, I'm all ears.
EDIT: I think the jQuery ajaxSuccess method might be the way to go here, but I'm not sure how to actually use it. I can't get anything to register. I basically want to add code to get any and all ajax requests from any source to call my JavaScript method on success. Can anyone show me the proper way to do this? I've tried a number of ways to do this, including adding jQuery("*").ajaxSuccess(function(){myFunction();});
to the bottom of my template xhtml file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
重写的答案:在修订历史记录中查看原始答案
您可以覆盖默认的
send<
XMLHttpRequest
的 /code> 方法,其中一个劫持readystatechange
处理程序:编辑: 上述函数不适用于 jQuery 请求,因此其他库可能会失败以及。下面的修订通过
setTimeout
hack 解决了这个问题,以延迟覆盖处理程序的代码。当然,对于 jQuery,您可以只使用.ajaxSuccess()
全局处理程序,但对于具有类似行为的其他库,这将很有用。http://jsfiddle.net/gilly3/FuacA/5/
我在IE7-9以及最新版本的Chrome和FF中测试了这一点
Rewritten answer: see original answer in revision history
You could override the default
send
method ofXMLHttpRequest
with one that hijacks thereadystatechange
handler:Edit: The above function doesn't work with jQuery requests, and so potentially it could fail with other libraries as well. The revision below addresses the issue with a
setTimeout
hack to delay the code that overrides the handler. Of course, with jQuery, you can just use the.ajaxSuccess()
global handler, but for other libraries with similar behavior, this would be useful.http://jsfiddle.net/gilly3/FuacA/5/
I tested this in IE7-9, and the latest versions of Chrome and FF
由于您使用的是 RichFaces,因此您可以简单地使用:
Since you are using RichFaces you can simply use this:
使用 a4j:status 应该可以,但它必须位于 h:form 标记内:
每次 ajax 调用后都会弹出一个等待图片并禁用搜索按钮。
有趣的是,至少在我们的代码中,这对于嵌套 a4j:region 中的任何内容都不起作用。
Using a4j:status should work, but it has to be inside an h:form tag:
After every ajax call this pops up a wait picture and disables the search button.
Interestingly enough, at least in our code, this doesn't work for anything in a nested a4j:region.
我认为这就是您正在寻找的: 在 jQuery 中使用全局 Ajax 处理程序
I think this is what you are looking for: Using Global Ajax Handlers In jQuery