одновременный вызов 2 функций через ajax с помощью «onclick» - PullRequest
3 голосов
/ 17 апреля 2011

У меня проблема с использованием AJAX.Я новичок в этом, поэтому ответ может быть простым!

Итак, у меня есть этот кусок кода.

echo '<input type="button" onclick="opinion(1,\''.$v.'\'); op_status(1,\''.$v.'\');"/>';

, который написан на php.

2 функции, которые вызываются через событие onclick, переключают AJAX в 2 разных HTML-элемента.То, что я получаю, является результатом выполнения второй функции в обоих div.

Любые идеи, почему это могло произойти?

Спасибо !!

извините за неудобства, но этомой первый пост.так что это один из 2 (идентичных, только с разными переменными) js-скриптов.

function op_status(op,pid)
{
if (op=="")
  {
  document.getElementById("opstatus"+pid).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("opstatus"+pid).innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","post_op_stat_disp.php?ajxpid="+pid,true);
xmlhttp.send();
}

вызываемый файл выполняет некоторые проверки и выводит текст в зависимости от этих проверок в определенном HTML-элементе div.другой скрипт js делает то же самое, выполняя некоторые другие тесты и выводя другой текст в другой HTML-файл div.:) однако выходные данные одинакового текста отражены в обоих div

1 Ответ

3 голосов
/ 17 апреля 2011

Сначала я бы добавил "var xmlhttp = null;"в верхней части вашей функции - которая будет локально ограничивать переменную, а не делать ее глобальной по природе - как указывает @David Dorward.Это в конечном итоге назначит обработчик ответа на запрос ajax во второй объявленной функции (которая когда-либо оказывается второй) в качестве обработчика ответа на оба запроса ajax, и вы получите описанное вами поведение.

Если вы по-прежнему получаете один и тот же текст в обоих div, то я подозреваю, что обе функции javascript вызывают функцию post_op_stat_disp.php вместо функции мнения, вызывающей то, что я бы назвал post_opinion_disp.php, и в результате она возвращает один и тот жеданные для каждого дел.Или (что еще более маловероятно), что и post_opinion_disp, и post_op_stat_disp возвращают один и тот же результат.

Поскольку эта проблема на самом деле не является основной для AJAX, а скорее всего является проблемой кодирования - я бы предложил вручную перейти на http://[server]/post_op_stat_disp.php?ajaxid=testи ваш другой URL-адрес и посмотрите, что должно быть заполнено в обоих div.

Тогда я настоятельно рекомендую вам абстрагировать ваш ajax-код в какую-то обычную функцию, чтобы не дублировать код статуса http и логику создания xmlhttp.И хотя это может не помочь вам решить эту конкретную проблему, оно уменьшило бы размер вашего кода до чего-то такого, если бы вы следовали советам @Jared Farrish и использовали jquery:



  function op_status(op, pid) {
     if (!op) return $('#opstatus' + pid).html("");

     $.get('post_op_status_disp.php?ajaxid=' + pid, function(r) {
          $('#opstatus' + pid).html(r);
     });
  }

Мои деньги на ключе varслово, которое гарантирует, что вы получите два разных объекта xmlhttp вместо одного глобального объекта.

Но, как большинство из них уже прокомментировали, вы можете опубликовать сгенерированные результаты, чтобы помочь нам помочь вам отследить этот дефект.

Спасибо, дайте нам знать, как это получается!

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