состояние загрузки кнопки AJAX - PullRequest
2 голосов
/ 29 августа 2011

Я сделал этот маленький скрипт с учебниками в интернете.Функция php вызывает этот javascript столько раз, сколько есть кнопок (foreach), сейчас у меня их три.$ value - это имя div конкретной кнопки (кнопки хранятся в массиве php).

Все работает нормально ... за исключением случаев, когда я быстро нажимаю на все кнопки, загрузочный GIF остается без JavaScript, меняющего статус кнопки.,Ответ, который он получает от другого php, - это новое состояние кнопки и изменение переменной сеанса.Переменная сеанса изменяется, но div dosent.

Итак, где мне нужна помощь, как я могу сделать так, чтобы при быстром нажатии кнопок 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 голосов
/ 02 сентября 2011

Просто совет. Всегда используйте функцию open перед событием 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();
0 голосов
/ 31 августа 2011

Поместите var xmlhttp; в самое начало функции, делая переменную явно локальной.Иногда без этого оператора браузеры могут пытаться найти глобальную переменную с этим именем, и мониторинг готовности состояния переносится с одного запроса на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...