Встроенный XMLHttpRequest (AJAX, вызывающий страницу, которая также использует AJAX)

У меня есть проблема со встроенным XMLHttpRequest;

Поток данных должен быть следующим:

Interface.php использует modifyRecords.js (XMLHttpRequest) для вызова информации из modifyRecords.php, который, в свою очередь, использует showRecords.js< /em> (XMLHttpRequest) для вызова информации из showRecords.php.

Если бы я мог каким-то образом это сделать, это сэкономило бы кучу копий и/или переписываний кода.

Когда я возвращаюсь, чтобы найти, где находятся ошибки, не возникает никаких проблем, showRecords.php и modifyRecords.php загружаются нормально по отдельности, просто когда AJAX вызывает другой AJAX полностью ломается.

Суть в следующем:

Мой пользовательский интерфейс вызывает modifyRecords.js, который выглядит следующим образом:

function modifyRecords(cell,report,column,oldValue)
{

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
     var xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
     var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById(cell).innerHTML=xmlhttp.responseText;

        }
      }
    xmlhttp.open("GET","modifyRecords.php?report="+report+"&column="+column+"&oldValue="+oldValue,true);
    xmlhttp.send();

}

modifyRecords.php вызывает другую функцию AJAX с именем showRecords.js;

function showRecords(str,column,nextDiv,oldValue)
{
if (str== null)
  {

  document.getElementById(nextDiv).innerHTML="----------------------------------------";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
 var xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
 var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById(nextDiv).innerHTML=xmlhttp.responseText;
    document.getElementById(nextDiv).value = oldValue ;


    }
  }
xmlhttp.open("GET","showRecords.php?"+column+"="+str,true);
xmlhttp.send();

}

Проблема в том, что каждый из них работает изолированно, однако, когда я использую одну функцию AJAX для вызова страницы, которая зависит от второй функции AJAX, записи не загружаются.

Я знаю, что это как-то связано с синхронностью, потому что мое единственное предположение состоит в том, что страница, на которую ссылаются, еще не закончила загрузку, когда ее вызывает функция ссылки.

Я попытался установить для параметров значение «false» для синхронного вместо обычного асинхронного, однако это нарушает любую функцию.

Какое решение было бы лучшим?

Я подумал об объединении всех моих функций AJAX, что потребовало бы тонны переписывания, чтобы сделать их более универсальными и функциональными для обеих сред.


person Dương Văn    schedule 23.10.2011    source источник
comment
Записи не загружаются - это не описание проблемы. Ошибка вылетает? Какая линия не работает? Пробовали ли вы добавлять alert() повсюду и смотреть, где они останавливаются?   -  person Ilia G    schedule 23.10.2011
comment
Встроенный XMLHttpRequest просто не работает, и я не мог понять, почему. По-видимому, это потому, что вы не можете innerHTML скрипты. Извините, это было лучшее, что я мог дать, не зная, что сказал ответчик. Я не думал размещать оповещения повсюду, это кажется хорошим методом отладки на будущее. Спасибо.   -  person Dương Văn    schedule 24.10.2011


Ответы (1)


Если я не ошибаюсь, вы пытаетесь вызвать свой второй AJAX-скрипт, установив innerHTML элемента с первым?

Скрипты не выполняются при добавлении с помощью innerHTML. Не знаю почему, меня это раздражало, но вам, вероятно, было бы лучше разделить HTML и JS, затем поместить HTML во innerHTML и eval использовать JS.

person Niet the Dark Absol    schedule 23.10.2011
comment
Это большое неудобство! Однако ваше предложение хорошее, я попытаюсь сделать так, чтобы одна страница вызывала оба сценария один за другим, вместо того, чтобы сценарии ссылались друг на друга. Спасибо, что поделились своими знаниями. - person Dương Văn; 23.10.2011