【问题标题】:xmlHttpRequest is blocking other functionsxmlHttpRequest 正在阻止其他功能
【发布时间】:2020-05-26 15:47:18
【问题描述】:

我正在使用 Js xmlHttpRequest 在我网站的不同页面上显示相同的菜单。最近发现有些功能在网站在线时没有执行,就像我做的一个测验一样。

我也尝试过使用 fetch,或者将脚本放在不同的文件中,但同样的事情一直在发生。

(在无法满足 xml 请求的本地检查时,测验确实有效。)

//load the menu
onload = function loadXMLDoc() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementsByTagName('body')[0].innerHTML +=
        this.responseText;
      }
    };
    xhttp.open("GET", "mnu.html", true);
    xhttp.send();
  }
  
  //check the quiz
  const checkBtn = document.getElementById('checkBtn')
checkBtn.onclick = function quizCheck() {
    //right answers
    var score = 0;
    if (q1a1.checked) {
        score = score + 1;
    }
    if (q2a1.checked) {
        score = score + 1;
    }
    alert("your score: " + score);
}
<li>
    Check the right answer:
        <br>
    <input type="checkbox" id="q1a1">Right
        <br>
    <input type="checkbox">Wrong
</li>

<li>
    Check the right answer:
        <br>
    <input type="checkbox" id="q2a1">Right
        <br>
    <input type="checkbox">Wrong
</li>

<button id="checkBtn">Check</button>

有人知道原因和/或有一些解决方案吗?

【问题讨论】:

  • "mnu" 是什么? .open() 的第二个参数应该是发出请求的 URL。

标签: javascript xml checkbox xmlhttprequest alert


【解决方案1】:

问题是这条线是错误的,这就是js不起作用的原因。

document.getElementsByTagName('body')[0].innerHTML += this.responseText;

你不能像这样添加到 innerHtml 中。 相反,您应该创建一个 html 元素并将其添加到正文中,如下所示:

if (this.readyState == 4 && this.status == 200) {
    var p = document.createElement("p");
    p.innerText = this.responseText;
    document.body.appendChild(p);
}

编辑:当然你想在&lt;p&gt;中添加一个html菜单而不是一个文本,所以你必须像这样添加它:

var nav = document.createElement('nav');
nav.innerHTML = this.responseText;
document.body.prepend(nav); // always at the top

【讨论】:

  • 谢谢!它就像一个魅力。?虽然你的方式更有意义,但为什么我的阻止了一些功能?
  • 据我所知,按照您的方式进行操作,完全替换正文的内容,然后从现有的 html“字符串”重新创建它,同时添加额外的字符串。这意味着不保留现有的 html 元素及其事件处理程序。如果您尝试添加用于获取 checkBtn 的代码,并在添加到 innerHtml 之后添加事件处理程序,它将起作用。但不建议这样做。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 2019-03-10
  • 2021-03-03
  • 2012-02-19
  • 2015-07-11
  • 1970-01-01
  • 2016-07-09
  • 2020-02-26
相关资源
最近更新 更多