ajax按钮加载状态

时间:2011-08-29 10:38:58

标签: php javascript ajax

我用互联网上的教程制作了这个小脚本。 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;
}

2 个答案:

答案 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();