Встроенный XMLHttpRequest (AJAX вызывает страницу, которая также использует AJAX) - PullRequest
0 голосов
/ 23 октября 2011

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

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

Interface.php использует modifyRecords.js (XMLHttpRequest) для вызова информации из modifyRecords.php , которая, в свою очередь, использует showRecords.js (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, что потребовало бы тонны переписывания, чтобы сделать их более универсальными и функциональными для обеих сред.

1 Ответ

1 голос
/ 23 октября 2011

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

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

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