Ajax按钮加载状态

ajax button loading state

本文关键字:状态 加载 按钮 Ajax      更新时间:2023-09-26

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

var xmlhttp;放在函数的最开头,使变量显式地本地化。有时,如果没有该语句,浏览器可能会尝试寻找具有此名称的全局变量,并且就绪状态监控从一个请求转移到另一个请求。

给你个小提示。总是在onreadystatechange事件之前使用open函数。你使用的方式可能适用于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();