为何我的ajaxStart、ajaxStop及error函数无法正常工作?
AjaxStart/AjaxStop 不触发的问题解决
- 核心问题:你只绑定了Ajax全局事件,但没有发起任何Ajax请求,这些事件自然不会被触发。
- 代码里的额外问题:
$loading已经是jQuery对象,不需要再用$($loading)重复包装,直接用$loading.show()/$loading.hide()即可。ajaxError的参数写法错误,正确的参数顺序是event, jqXHR, settings, thrownError,判断超时应该通过jqXHR.statusText来判断。
以下是修正后的完整代码,包含一个测试用的Ajax请求:
<body> <div id="loading"> <img src="loading.gif" alt="" width="100px" height="100px"> </div> <div id="divResult"></div> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script> $(document).ready(() => { var $loading = $('#loading').hide(); $(document).ajaxStart(function () { $loading.show(); }); $(document).ajaxStop(function () { $loading.hide(); alert('All ajax requests completed'); }); $(document).ajaxError(function (event, jqXHR, settings, thrownError) { if (jqXHR.statusText === 'timeout') { alert('timeout'); } }); // 添加测试用Ajax请求,触发全局事件 $.ajax({ url: 'your-api-url', // 替换为实际接口地址 timeout: 5000, success: function(data) { $('#divResult').html(JSON.stringify(data)); } }); }); </script> </body>
注意:确保你已经正确引入jQuery库(代码中补充了CDN引入,可替换为本地资源),jQuery 3.x及以上版本均支持这些全局Ajax事件。
内容的提问来源于stack exchange,提问作者user22934804
相关产品推荐
相关产品推荐

