2017-08-01 106 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

謝謝你,我會解決這個問題並回復你 –