javascript—我无法使用onreadystatechange方法触发xmlhttprequest,而onreadystatechange方法是更好的方法

8aqjt8rx  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(205)

我有一个html表格的名字,我想能够点击一个名字,检索更多的细节的人,并显示在一个'警报'弹出窗口。我计划使用xmlhttprequest将名称发送到php文件以进行处理。我可以毫不费力地从表中检索名称,但我已经运行了一些诊断测试,似乎无法使用onreadystatechange方法触发xmlhttprequest。这是我检索名称的代码:-

function getDetails(x){
        var tr1 = x.parentNode.rowIndex;
        var td1 = x.cellIndex;
        var table = document.getElementById("selectedTeams");
        //Diagnostic 
        //document.getElementById("tr1").innerHTML = "1st Row index is: " + tr1; 
        //document.getElementById("td1").innerHTML = "1st Column index is: " + td1;  
        player = table.rows[tr1].cells[td1].innerHTML;
        player = player.replace("<b>", "");
        player = player.replace("</b>", "")
        player = player.trim();
        //Diagnostic 
        //document.getElementById("res3").innerHTML = "The player selected is: " + player;
        getName(player);
        //Diagnostic 
        //alert("This will be the "+ player + " details");
    }

这会得到玩家的名字。它工作得很好。然后将玩家的名字传递给 getName() 功能。从我的诊断中,它不会触发onreadystatechange并执行后续功能。我是否在这里使用了正确的方法,或者是否有更合适的方法,以及代码的其余部分是否正常。getname()函数的代码是:-

function getName(str){
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200){
                //document.getElementById("res3").innerHTML = this.responseText;
                alert(this.responseText);
            }
            xmlhttp.open("GET", "playerDetails.php?q= " + str, true);
            xmlhttp.send();
            //Diagnostic 
            //alert("after onreadystatechange");
        }
        //Diagnostic 
       //alert("after function");
    }
pdkcd3nj

pdkcd3nj1#

你已经把 opensend 在房间里打电话 onreadystatechange 事件处理程序,直到 opensend 我们称之为。看到第二十二条军规了吗?通过将调用移动到来解决此问题 opensendonreadystatechange 将事件处理程序放入封闭的 getName 功能体如下:

function getName(str) {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200){
      //document.getElementById("res3").innerHTML = this.responseText;
      alert(this.responseText);
    }
    //Diagnostic 
    //alert("after onreadystatechange");
  };
  xmlhttp.open("GET", "playerDetails.php?q= " + str, true);
  xmlhttp.send();
  //Diagnostic 
  //alert("after function");
}

相关问题