Javascript 未显示XMLHttpRequest输出

Javascript 未显示XMLHttpRequest输出,javascript,Javascript,下面是我的JavaScript函数:- function delfile(fileid) { var div = "fileid_" + fileid; var location = "/delfile/" + fileid; if (window.XMLHttpRequest) { var xmlhttp=new XMLHttpRequest(); } else { var xmlhttp=new ActiveXObject("Microsoft.

下面是我的JavaScript函数:-

function delfile(fileid) {
  var div = "fileid_" + fileid;
  var location = "/delfile/" + fileid;
  if (window.XMLHttpRequest)
  {
    var xmlhttp=new XMLHttpRequest();
  } 
  else
  {
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    {
      document.getElementById(div).innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("POST", location, true);
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlhttp.send("");
}
已解决的JavaScript函数:-

function delfile(fileid) {
  var div = "fileid_" + fileid;
  var location = "/delfile/" + fileid;
  if (window.XMLHttpRequest)
  {
    var xmlhttp=new XMLHttpRequest();
  } 
  else
  {
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    {
      document.getElementById(div).innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("POST", location, true);
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlhttp.send("");
}
以下是我从PHP生成的内容:-

echo "<td><div id='fileid_{$id}'><button onclick='delfile({$id})'>Delete File</button></div></td>";
echo“删除文件”;
我的问题是,当用户同时单击2-3个链接时,http请求会通过javascript发送,服务器上的文件会被删除,但div id不会随着http请求的输出而更新。只有用户上次单击的按钮才能获得http请求的输出

PHP脚本绝对没有问题,我只是给它参考。delfile脚本只发送“File Delted”


通过使用@torazaburo建议的局部变量解决。

您未能将
xmlhttp
声明为函数的局部变量,这意味着它在多个请求之间共享,这会导致灾难

同时,请声明函数的
$div
$location
本地。另外,请删除这些变量名的
$
前缀,因为这种做法会腐蚀大脑


如果您在函数顶部添加了一个“use strict;”,那么您没有声明变量的情况就会被发现,这是您应该做的。

请删除MS cruft。它仅适用于IE6及以下版本。您还可以删除所有其他XMLHttpRequest样板文件,我们知道它是如何工作的。出于好奇,你从哪本8年前的书上复制了这本书?我希望它能在IE6上运行,所以不能删除它。IE6在所有发达国家的份额都在1%以下。看见当MS停止XP支持时,它将很快降至零。你是否想保留它取决于你自己,但请不要用这些无关的细节塞住你的代码样本。我会删除它,但你能回答我的问题吗?我如何将它声明为局部变量?就像JS教程第一段中描述的那样。提示:使用
var
。我使用了var,但仍然存在相同的问题。您是否在函数中使用
var
声明了
$div
$location
?请更新问题中的代码,说明您是如何做到这一点的。