Проблема с ajax работает только один раз - PullRequest
0 голосов
/ 22 августа 2011

AJAX работает только один раз, мне нужно перезагрузить страницу, чтобы он снова заработал.Как мне это исправить?

echo "<div class='unsubscribe'><a id='us$id' href='javascript:unsubscribe($id);'><img src='/unsubscribe.jpg' alt='unsubscribe' /></a></div>";



function unsubscribe(number)
{
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("us"+number).innerHTML="<img src='/subscribe.jpg' alt='subscribe' />";
    }
  }
xmlhttp.open("GET","/unsubscribe.php?id="+number,true);
xmlhttp.send();
}

Ответы [ 4 ]

1 голос
/ 22 августа 2011

Браузеры расходятся в API для AJAX, и было бы разумно использовать некоторые хорошо поддерживаемые библиотеки, такие как jQuery, для написания совместимого и простого кода.Если вам не нужно множество функций, вы можете попробовать другие рекомендации из этой темы.

AJAX Only Javascript Library

0 голосов
/ 27 сентября 2012

переместить xmlhttp.open ("GET", "/ unsubscribe.php? Id =" + number, true);перед строкой xmlhttp.onreadystatechange = function ().

вот порядок ajax:

  1. open ()
  2. onreadystatechange
  3. send ()
0 голосов
/ 23 августа 2011

Я думаю, что есть проблема с именами us$id и $id. Если вы не используете jQuery, то знак $ не является чем-то особенным, это простой символ. Таким образом, us$id и $id не связаны, $id - это просто подстрока us$id. Итак, unsubscribe($id) вызывается с неопределенным аргументом. Если вы хотите заменить изображение в us$id, это не будет работать, потому что getElementById("us"+number) не найдет элемент.

0 голосов
/ 22 августа 2011

Измените свой HTML: используйте обработчик onClick, а не href:

<a id='us$id' href="#" onclick="unsubscribe($id);">

Это гарантирует, что действие происходит при нажатии, но не перенаправляет целевую страницу браузера (именно поэтому ваша функция будетв настоящее время срабатывает только один раз).

В зависимости от макета вашей страницы приведенные выше результаты могут привести к «рывку» страницы, когда происходит щелчок - если это так, вы можете попробовать вернуть false изобработчик кликов:

<a id='us$id' href="#" onclick="unsubscribe($id); return false;">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...