javascript - Ajax 请求不断翻倍

标签 javascript jquery ajax

我有一个网站,主页上有一个内容 div,并且使用 ajax 切换内容。每次我在不同页面之间切换时,在我看来,ajax 不断发出双倍的请求量。这是处理页面切换的代码:

$(document).on('click','#sideNav a',function(e){ 
    e.preventDefault();
    var url = $(this).attr('href'); //get the link you want to load data from

    $.ajax({ 
     type: 'GET',
     url: url,
     success: function(data) { 
        $("#content").empty();
        $("#content").html(data); 
    } 
   }); 
   //window.history.pushState('object', 'New Title', url);
 });
});

现在假设我切换到模板页面,其中显示已创建的模板并允许我创建模板。

现在,我第一次切换到此页面并创建一个新模板,一切都很好,在 php 中发布了一篇文章,并在数据库中创建了一个新条目。现在,如果我在页面之间切换并返回到模板页面并创建一个新模板,只有这一次 ajax 才会向 php 发送两个帖子并创建 2 个数据库条目,现在如果我再这样做一次,4 个帖子就会变得疯狂,依此类推。

每个使用 ajax 的函数都会发生这种情况。当我单独进入模板页面而不是通过带有内容 div 的主页时,这种情况不会发生,所以我怀疑我切换页面的方式出现了问题。

编辑:实际上并不是加倍,而是每次添加一个请求。

更新 我以某种方式修复了它,不完全确定如何修复,但这是我所做的事情:我将 .off('click','#sideNav a') 添加到我的函数中,并将该函数放入单独的 . js 文件。我觉得它每次都会重新加载脚本,再次不确定到底是什么修复了它,希望它对某人有帮助。

最佳答案

作为此问题的解决方案,您可以在附加之前使用 off() 分离点击事件(如果存在):

$(document).off('click','#sideNav a').on('click','#sideNav a',function(e){ 
    e.preventDefault();
    var url = $(this).attr('href'); //get the link you want to load data from
    $.ajax({ 
     type: 'GET',
     url: url,
     success: function(data) { 
        $("#content").empty();
        $("#content").html(data); 
    } 
   }); 
   //window.history.pushState('object', 'New Title', url);
 });
});

IMO,此问题的原因来自于发布的代码,当您多次调用它时,每次调用它时,事件都会附加一次,依此类推。

关于javascript - Ajax 请求不断翻倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541590/

相关文章:

javascript - 多个 Canvas 和 JSON 加载几何图形时出现 Three.js 错误

javascript - jquery 在 Django 中不工作

javascript - JS测量ajax完成时间

jquery - jQuery 延迟对象中调用 "then"和 "success"的顺序

javascript - 加载 JSON 文件

JavaScript函数效率

javascript - HTML5 输入类型=时间的正则表达式

ajax - 使用 Capybara 测试在 AJAX 请求完成之前加载消息内容

php - 如何使用 php 定位 mysql 查询表结果中的特定单元格

jquery - Ajax 帖子获取 "cancelled"