2017-08-01 105 views
-1

我问了一半这个问题已经出现,但当我开始调试和乱码时,我发现了一些其他问题。在我的网站上,http://www.yokaproject.com/,出于参数的缘故,这是我希望你做的。首先点击艺术标签,你会注意到两个日志到控制台一个用于脚本长度,另一个是ajax调用,分别是5和1。我不明白它为什么记录5,我有4个已知的脚本。然后点击下一个标签,音乐,它会记录两次脚本长度,并且ajax调用两次,为什么?此外,它将继续增加这种模式。我有这个非常简单的请求,请在此与我一起工作。我不是说为我写代码或给我所有的东西,只是帮助指导我,所以我可以真正了解我的错误以及如何纠正它。事实上,我甚至会和某人聊天,并在这个问题上工作,我真的很想写更好的JS。话虽这么说这里是我的代码(忽略我的意思脚本检查功能评论说出来):Ajax加载多次以及脚本加载多次

*这只是我的AJAX功能,请查看我的网站上看到更多细节,http://www.yokaproject.com/index.html

function handlersAttached(){ 
    $('.header a').on('click', ajaxLoad); 

} 

handlersAttached(); 


function ajaxLoad(e) { 
    console.log($("script").length); 
    console.log("ajax called"); 
    e.preventDefault(); 
    var url = $(this).attr("href"); 
    var that = $(this); 
    that.off('click'); // remove handler 
    $.ajax({ 
     url: url, 
     dataType: "html", 
     type: "GET", 
     cache: false 
    }).done(function(data){ 
     $("#container").html(data); 
    }) 
}; 
+2

你的ajax正在加载整个页面的全部脚本 – charlietfl

+0

@charlietfl任何建议我应该如何解决这个问题? –

回答

-1

当你发送ajax请求,并改变你的请求的页面内容,你重新载入上一个脚本,你的函数再次执行乘法时间 我建议你只需在你的ajax请求中重新加载纯html就可以解决你的问题!

,如果你用PHP这样的工作代码工作的一些事情你

<?php if(!isset($_GET['ajax'])) include "header.php" //your style here ?> 
// your page code 
<?php if(!isset($_GET['ajax'])) include "footer.php" // your script here?> 
0

在第一次点击$(scripts)返回以下标签:

<script async="" src="https://www.google-analytics.com/analytics.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script type="text/javascript" src="../assets/instafeed.js-master/instafeed.min.js"></script> 
<script type="text/javascript" src="../assets/load_scripts.js"></script> 
<script>/*google analytics stuff*/</script> 

在下一个如下:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script type="text/javascript" src="../assets/instafeed.js-master/instafeed.min.js"></script> 
<script src="../assets/load_scripts.js"></script> 
<script async="" src="https://www.google-analytics.com/analytics.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script type="text/javascript" src="../assets/instafeed.js-master/instafeed.min.js"></script> 
<script type="text/javascript" src="../assets/load_scripts.js"></script> 
<script>/*google analytics stuff*/</script> 

看来,他们的前三个每个t都附加到DOM树ime您的ajax呼叫执行。此外,load_scripts.js也是其中之一,所以下次点击会分别产生更多的ajax调用和更多的触发处理程序。

解决方案:不要在ajax响应中包含脚本,或者至少不要将它们附加到DOM树。取决于你想要达到的目标:)

+0

有趣,快速的问题,这是我的内容不断翻倍的原因吗?当您从艺术标签转到任何其他标签时,回到艺术标签时,它会双击或添加相同的内容。 –

+0

是的,我敢打赌,这正是因为这个原因。 每次点击后,您都有'$(“#container”)。html(data);'因为在ajax调用中附加'load_scripts.js'(包含这个html替换)而执行多次。所以你也要多次添加你的内容。 –

+0

谢谢你,我会解决这个问题并回复你 –