Php AJAX重复函数调用

Php AJAX重复函数调用,php,html,ajax,Php,Html,Ajax,当用户点击一些导航链接时,我有一个AJAX调用。调用将更新页面的内容,URL将更新到存储内容的资源的相应链接 我的问题是,用户单击链接的次数越多,“swapContent()”函数在每次单击时被递归调用的次数就越多 例如,如果我单击“第2页”的链接,函数将被调用一次,然后如果我单击返回主页,函数将被调用2或3次,依此类推 有人能指出为什么会这样吗 function supports_history_api() { return !!(window.history && his

当用户点击一些导航链接时,我有一个AJAX调用。调用将更新页面的内容,URL将更新到存储内容的资源的相应链接

我的问题是,用户单击链接的次数越多,“swapContent()”函数在每次单击时被递归调用的次数就越多

例如,如果我单击“第2页”的链接,函数将被调用一次,然后如果我单击返回主页,函数将被调用2或3次,依此类推

有人能指出为什么会这样吗

function supports_history_api() {
  return !!(window.history && history.pushState);
}

function swapContent(href) {
  var req = new XMLHttpRequest();
  req.open("GET",
           "http://localhost/portfoliowebsite/PHP/" +
             href.split("/").pop(),
           false);
  req.send(null);
  if (req.status == 200) {
    document.getElementById("homeContBox").innerHTML = req.responseText;
    setupHistoryClicks();
    return true;
  }
  return false;
}

function addClicker(link) {
  link.addEventListener("click", function(e) {
    if (swapContent(link.href) == true) {
      history.pushState(null, null, link.href);
      e.preventDefault();
    }
  }, true);
}

function setupHistoryClicks() {
  addClicker(document.getElementById("home"));
  addClicker(document.getElementById("cv"));
  addClicker(document.getElementById("port"));
  addClicker(document.getElementById("contact"));
}

window.onload = function() {
  if (!supports_history_api()) { return; }
  setupHistoryClicks();
  window.setTimeout(function() {
    window.addEventListener("popstate", function(e) {
    alert("");
      swapContent(location.pathname);
    }, false);
  }, 1);
}

setupHistoryClicks()中存在问题:

addClicker(link)不断添加事件侦听器,因此每次加载内容时,您都会向链接添加更多执行


因此,您将执行更多的单击。

这是一个旧线程,但我很好奇您是如何找到它的。我认为您的问题是因为无论来自
req.responseText
的是什么,它都不包含home、cv、port和contact元素,而addClicker就是应用这些元素的。