запрос ajax один за другим - PullRequest
0 голосов
/ 23 июля 2011

Мне нужна функция, которая нажимает одну ссылку, отправляет запрос ajax на 2 страницы одну за другой.

сначала отправляет данные на page1.php, когда завершает работу page1, возвращает данные на главную страницу, затемотправьте данные на page2.php, выполните другой процесс ajax и верните данные на главную страницу.

Я пишу page2.php Запрос в page1.php document.getElementById("div1").innerHTML = HttPRequest.responseText;, но это только вернет данные page2's и пропуститвернуть данные из page1.php

в firebug, израсходовать:

page1.php (always show loading.gif)
page2.php 200 OK 2199ms

как сделать ajax один за другим?Спасибо.

function myajax(text) {
      var HttPRequest = false;
      if (window.XMLHttpRequest) {
         HttPRequest = new XMLHttpRequest();
         if (HttPRequest.overrideMimeType) {
            HttPRequest.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) {
         try {
            HttPRequest = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               HttPRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      } 
      if (!HttPRequest) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
        var url = 'page1.php';
        var pmeters = "text=" + text;
        HttPRequest.open('POST',url,true);
        HttPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        HttPRequest.send(pmeters);
        HttPRequest.onreadystatechange = function()
        {

             if(HttPRequest.readyState == 4) 
              {
               document.getElementById("div1").innerHTML = HttPRequest.responseText;

               var url = 'page2.php';
                    var pmeters = "text=" + text;
                    HttPRequest.open('POST',url,true);
                    HttPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    HttPRequest.send(pmeters);
                    HttPRequest.onreadystatechange = function()
                    {

                         if(HttPRequest.readyState == 4) 
                          {
                           document.getElementById("div2").innerHTML = HttPRequest.responseText;
                          }
                    }
              }
        }
   }

1 Ответ

0 голосов
/ 23 июля 2011

Для этого есть два варианта.

  1. Используйте Ajax в синхронном режиме, поэтому код будет ждать, пока вы не получите результаты со страницы 1
  2. Вызовите метод Ajax только для страницы 2при ответе Page1

вариант 2 лучше, поскольку он работает в асинхронном режиме.

Вот псевдокод:

 var xhr = new XMLHttpRequest();
 xhr.open( ..)
 xhr.onreadstatechange = function() {
      // handle page1 response

      // do page2 reauest
      var xhr2 = new XMLHttpRequest();
      xhr2.open( ... )
      xhr2.onreadystatechange =  function() {
        // handle page2 response

      }
      xhr2.send(null);
 }
 xhr.send(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...