如何判断loadLoker函数中的jQuery Ajax请求是否正在执行
解决Ajax请求重复触发的问题
要避免loadLoker函数在Ajax请求未完成时被重复调用,只需添加一个状态变量跟踪请求状态,修改后的代码如下:
// 定义全局状态变量,标记当前是否有请求在运行 let isLoading = false; function loadLoker(id, e){ // 如果请求正在进行,直接退出函数 if(id==currentLokerId || isLoading) return; var url = "{{ route('daftarloker.show', ':id') }}" url = url.replace(':id', id); $.ajax({ type: 'POST', url: url, // 请求发送前标记为正在加载 beforeSend: function() { isLoading = true; // 这里可以添加加载状态的UI提示,比如显示loading $('#lokerdetailloadingContainer').show(); }, success: function(res) { if(res.success){ let loker = res.data.data; currentLokerId = loker.lokerid; $(e).parents('.card').addClass("border border-info border-3"); $('#lokerPerusahaanNama').text(loker.perusahaan.nama); $('#lokerdetailContainer').show(); swal.close() }else{ swal({ title: "Gagal!", text: "Gagal mendapatkan data dari server", icon: "warning", button: "Ok!", type: "warning", }); } }, error: function (request, status, error) { swal("Gagal!", "Gagal mendapatkan data dari server", "error"); }, // 请求完成(成功/失败)后重置加载状态 complete: function() { isLoading = false; $('#lokerdetailloadingContainer').hide(); } }); }
关键逻辑说明:
isLoading变量作为全局状态标记,初始值为false,表示无请求运行- 函数开头增加
isLoading判断,若为true则直接退出,阻止重复调用 beforeSend回调在请求发送前将isLoading设为true,锁定请求状态complete回调在请求结束(无论成功或失败)时将isLoading设为false,解锁状态,确保后续请求可以正常触发
内容的提问来源于stack exchange,提问作者Gvnama Putra
相关产品推荐
相关产品推荐

