我用互联网上的教程制作了这个小脚本。 php函数调用这个javascript多次,因为有按钮(foreach),现在我有三个。 $ value是特定按钮的div名称(按钮存储在php数组中)。
一切正常......除非我快速点击所有按钮,加载gif仍然没有javascript更改按钮状态。它从另一个php获得的响应是新的按钮状态和会话变量更改。会话变量被改变但是div剂量。
所以,继续我需要帮助的地方,我怎么能这样做,当我快速点击按钮时,div也会改变?
我的代码
function load_javascripts() {
foreach ($GLOBALS["VARIABLES"]["button_list"] as $key => $value) {
$scripts .= "
function run_alias_button_".$value."(str)
{
document.getElementById('aliasbutton_".$value."').innerHTML='<img src=ajax_loader.gif>';
if (str=='')
{
document.getElementById('aliasbutton_".$value."').innerHTML='';
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('aliasbutton_".$value."').innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open('GET','?leht=alias_logimine&alias=".$value."',true);
xmlhttp.send();
}
";
}
return $scripts;
}
答案 0 :(得分:0)
将var xmlhttp;
放在函数的最开头,使变量显式为local。有时没有该语句,浏览器可能会尝试使用此名称查找全局变量,并且readystate监视会从一个请求转移到另一个请求。
答案 1 :(得分:0)
只是小费。始终在 onreadystatechange 事件之前使用打开功能。你使用的方式可能适用于Firefox,但IE不明白。喜欢这个:
xmlhttp.open('GET','?leht=alias_logimine&alias=".$value."',true);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('aliasbutton_".$value."').innerHTML=xmlhttp.responseText;
}
}
xmlhttp.send();