无法修改插件时,如何在特定AJAX请求完成后执行JS函数?
实现方法:检测插件AJAX筛选请求完成
完全可以实现,下面提供两种靠谱的方案,不用修改插件代码就能捕获特定AJAX请求的完成事件:
方案一:用jQuery全局AJAX事件(适合插件用jQuery发起请求的情况)
利用jQuery的ajaxComplete全局事件,它会在所有AJAX请求完成后触发,我们只需要在回调里判断当前请求是不是目标筛选请求即可。
操作步骤:
- 打开浏览器开发者工具(F12),切换到「Network」标签,筛选「XHR」类型;
- 触发插件的筛选功能,找到对应的AJAX请求,查看请求的Form Data里的
action参数值(比如可能是plugin_post_filter); - 用下面的代码替换对应的参数:
$(document).ready(function() { $(document).ajaxComplete(function(event, xhr, settings) { // 匹配目标AJAX请求:检查请求数据里是否包含插件的action参数 if (settings.data && settings.data.includes('action=plugin_post_filter')) { console.log("筛选AJAX已完成"); activatePopup(); // 执行你的自定义函数 } }); });
如果想更精准,还可以结合响应内容判断,比如检查响应里是否包含筛选后文章容器的类名:
if (settings.data.includes('action=plugin_post_filter') && xhr.responseText.includes('.filtered-posts-wrap')) { // 执行你的逻辑 }
方案二:原生JS监听所有XMLHttpRequest请求(兼容所有情况)
如果插件没有用jQuery发起AJAX,就用原生JS重写XMLHttpRequest的send方法,全局监听请求完成事件。
示例代码:
document.addEventListener('DOMContentLoaded', function() { const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(body) { this.addEventListener('load', function() { // 匹配目标请求:检查请求URL是WP的AJAX接口,且请求数据包含目标action if (this.responseURL.includes('wp-admin/admin-ajax.php') && body && body.includes('action=plugin_post_filter')) { console.log("筛选AJAX已完成"); activatePopup(); // 执行你的自定义函数 } }); originalSend.call(this, body); }; });
注意事项:
- 一定要替换代码里的
action=plugin_post_filter为你实际找到的插件筛选请求的action值; - 把代码放在主题的
footer.php里(</body>标签前),或者通过主题的自定义JS功能添加; - 测试时可以先打印
settings.data(方案一)或body(方案二),确认判断条件的准确性。
内容的提问来源于stack exchange,提问作者LBF
相关产品推荐
相关产品推荐

