Javascript xmlhttp.responsetext无法正常工作

Javascript xmlhttp.responsetext无法正常工作,javascript,Javascript,我想创建一个随机密码和QRcode密码。 我有一些用于设计的代码和一些用于函数的javascripts代码。当我单击“创建新密码”按钮时,我会在文本框中看到Html标记,而不是密码。如下所示: <div align="left"> <label>Google Authenticator Setting</label> <form> <br> secret: <input type="text" id="mysecret" name

我想创建一个随机密码和QRcode密码。 我有一些用于设计的代码和一些用于函数的javascripts代码。当我单击“创建新密码”按钮时,我会在文本框中看到Html标记,而不是密码。如下所示:
<div align="left">
<label>Google Authenticator Setting</label>
<form>
<br>
secret: <input type="text" id="mysecret" name="secret" value="" >
<br>
<input type="Button" class="elgg_button" value="Create new secret"       width="610px" onclick = "newSecret()" >
<input type="Button" id="qrcodebtn" class="elgg_button" value="Show/Refresh qrcode"   width="610px" onclick = "genQrCode()" >
</form>
<br>
</div>
<div id="qrcode" style="text-align: center;margin-left: auto;margin-right:  auto;width:700px"></div>
<br>
<script type="text/javascript">
var qrcode = new QRCode(document.getElementById("qrcode"), 
{
width : 200,
height : 200
});

var qrurl;

function stringGen(len)
{
var text = "";

var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";

for( var i=0; i < len; i++ )
    text += charset.charAt(Math.floor(Math.random() * charset.length));

return text;
}

function newSecret()
{
var xstr = "";
qrurl = "";
document.getElementById('mysecret').value = "";

window.XMLHttpRequest
{
    xmlhttp = new XMLHttpRequest();
}

//xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() 
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    {
        //alert(xmlhttp.responseText);
      xstr=xmlhttp.responseText;
    }
}
xmlhttp.open("POST","mod/test/views/default/test/coder.php",false);
xmlhttp.send();

  if(xstr != "")
{
     var res = xstr.split(";");
    qrurl = res[1];
    document.getElementById('mysecret').value = res[0];

}
else
{
    alert("Empty Str!")
}
}
function genQrCode()
{
if (qrurl=="") 
{
    alert("Generate a text");
    return;
}
qrcode.makeCode(qrurl);
}
</script>

谷歌认证设置

秘密:


var qrcode=新的qrcode(document.getElementById(“qrcode”), { 宽度:200, 身高:200 }); var-qrul; 函数stringGen(len) { var text=“”; var charset=“abcdefghijklmnopqrstuvxyz234567”; 对于(变量i=0;i
Ajax是异步的

这意味着:向服务器发送请求。回复需要一些时间。在等待响应时,将执行其余代码。 因此,您不能使用xstr,只需将它存在于(代码中较大的行号)xmlhttp.send()下即可

相反,Ajax的工作原理是:您给出一个回调,这个函数将在响应返回后执行。 此功能:

xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    //alert(xmlhttp.responseText);
    xstr = xmlhttp.responseText;
  }
}
// notice: xstr is empty here
您应该只在这个函数中使用xstr。继续下去。大概是这样的:

xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    xstr = xmlhttp.responseText;
    if(xstr != "") {
      var res = xstr.split(";");
      qrurl = res[1];
      document.getElementById('mysecret').value = res[0];
    }
  }
}

谢谢你的回答,这是正确的,并且在其他网站上工作过。我从你的回答中了解到我使用elgg函数来解决问题,因为我为elgg编写了一个插件。你能帮我吗?如果你知道elgg,请发送一个电子邮件地址。如果不知道,请向我介绍其他人可以帮助我了解elgg插件。非常感谢:)不,对不起,我不知道elgg。我知道elgg上有很多大型网站;所以我认为它是好的。无论如何永远不要忘记,标准规则仍然适用。