2014-09-28 68 views
0

这里是我的JavaScript函数: -XMLHttpRequest的输出未显示

解决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>"; 

我的问题是,当用户同时点击2-3个链接时,http请求通过javascript发送,并且服务器上的文件被删除,但div id不会更新http请求的输出。只有用户最后点击的按钮才会获得http请求的输出。

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

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

+0

请删除MS cruft。它仅适用于IE6及更低版本。你也可以删除所有其他的XMLHttpRequest样板文件,我们知道它是如何工作的。出于好奇,你写了一本8年的书吗? – 2014-09-28 18:05:02

+0

我希望它能够在IE 6上工作,所以无法删除它。 – 2014-09-28 18:16:38

+0

所有发达国家的IE6份额均低于1%。请参阅https://www.modern.ie/en-us/ie6countdown。当MS停止XP支持时,它会很快降到零。不管你是否想保留它取决于你,但请不要堵塞你的代码示例与这些不相关的细节。 – 2014-09-28 18:33:50

回答

1

你没有声明xmlhttp本地的功能,这意味着它在多个请求之间共享,这是一个灾难的秘诀。

当你在这里,也请声明$div$location本地的功能。此外,请删除这些变量名称的$前缀,因为这种做法已知会腐烂大脑。

如果您已经提出“严格使用”,那么您未能声明变量将会被提取出来。在你的函数的顶部,如你所愿。

+0

如何将其声明为局部变量? – 2014-09-28 18:59:34

+0

按照JS教程第一段中介绍的方式。提示:使用'var'。 – 2014-09-28 19:02:27

+0

我用var但仍然是同样的问题。 – 2014-09-28 19:28:31