Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Параллельный запуск Ajax
Форум программистов > Интернет и сети > Web 2.0, AJAX, Ruby, RSS технологии
Альберт
господа есть такой пример.

создадим файл ajaj.php
Код
<table>
<tr>
<td>data</td>
<td>state</td>
<td>status</td>
<td>XMLHttpRequest</td>
<tr>

<tr>
<td><input type="button" id="gt1" value="0"></td>
<td><input type="button" id="gt1state" value="0"></td>
<td><input type="button" id="gt1status" value="0"></td>
<td><input type="button" id="gt1req" value="0"></td>
<tr>

<tr>
<td><input type="button" id="gt2" value="0"></td>
<td><input type="button" id="gt2state" value="0"></td>
<td><input type="button" id="gt2status" value="0"></td>
<td><input type="button" id="gt2req" value="0"></td>
<tr>


<tr>
<td><input type="button" id="gt3" value="0"></td>
<td><input type="button" id="gt3state" value="0"></td>
<td><input type="button" id="gt3status" value="0"></td>
<td><input type="button" id="gt3req" value="0"></td>
<tr>


</table>


<script type="text/javascript">

var reqv1 = new init();
    reqv2 = new init();
    reqv3 = new init();


alert(window.createRequest());

function init(){
if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
      }
}


function processRequest1() {
document.getElementById('gt1state').value=reqv1.readyState;
document.getElementById('gt1req').value=reqv1;
if (reqv1.readyState == 4) {
document.getElementById('gt1status').value=reqv1.status;
   if (reqv1.status == 200) {
    document.getElementById('gt1').value=eval(reqv1.responseText)[0];
     }
   }

}



function processRequest2() {
document.getElementById('gt2state').value=reqv2.readyState;
document.getElementById('gt2req').value=reqv2;

if (reqv2.readyState == 4) {
document.getElementById('gt2status').value=reqv2.status;
   if (reqv2.status == 200) {
    document.getElementById('gt2').value=eval(reqv2.responseText)[0];
     }
   }

}


function processRequest3() {
document.getElementById('gt3state').value=reqv3.readyState;
document.getElementById('gt3req').value=reqv3;
if (reqv3.readyState == 4) {
document.getElementById('gt3status').value=reqv3.status;
   if (reqv3.status == 200) {
    document.getElementById('gt3').value=eval(reqv3.responseText)[0];
     }
   }

}



function ajaxRUN1(url){
reqv1.open('POST',url,true);
reqv1.onreadystatechange=processRequest1;
reqv1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
reqv1.send(null);
}


function ajaxRUN2(url){
reqv2.open('POST',url,true);
reqv2.onreadystatechange=processRequest2;
reqv2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
reqv2.send(null);
}


function ajaxRUN3(url){
reqv3.open('POST',url,true);
reqv3.onreadystatechange=processRequest3;
reqv3.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
reqv3.send(null);
}



</script>

<input type="button" id="gt" value="0" onclick="ajaxRUN1('ajaj1.php');">
<input type="button" id="gt" value="0" onclick="ajaxRUN2('ajaj2.php');">
<input type="button" id="gt" value="0" onclick="ajaxRUN3('ajaj3.php');">



создадим файл ajaj1.php
Код
<?
include('php2json.php');
$t[0]="first ".time();
echo php2json($t);

for ($i=0;$i<1000000*8;$i++){
$aa=4;
$tt=$aa*2;
}
?>

создадим файл ajaj2.php

Код
<?
include('php2json.php');
$t[0]="first ".time();
echo php2json($t);

for ($i=0;$i<1000000*4;$i++){
$aa=4;
$tt=$aa*2;
}
?>

создадим файл ajaj3.php
Код
<?
include('php2json.php');
$t[0]="first ".time();
echo php2json($t);
?>

создадим файл php2json.php
Код
<?
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  // disable IE caching
header("Last-Modified: " . gmdate( "D, d M Y H:i:s") . " GMT");
header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

function php2json($a) {
if(is_null($a))
   return 'null';
if($a===false)
   return 'false';
if($a===true)
   return 'true';
if(is_scalar($a)) {
   $a=addslashes($a);
   $a=str_replace("\n",'\n',$a);
   $a=str_replace("\r",'\r',$a);
   $a=preg_replace('{(</)(script)}i',"$1'+'$2",$a);
   return "'$a'";
}
$isList=true;
for($i=0,reset($a);$i<count($a);$i++,next($a))
   if(key($a)!==$i) {
      $isList=false;
      break;
   }
$result=array();
if($isList) {
   foreach($a as $v)
      $result[]=php2json($v);
   return '['.join(',',$result).']';
}
else {
   foreach($a as $k=>$v)
      $result[]=php2json($k).':'.php2json($v);
   return '{'.join(',',$result).'}';
}}

?>



------------------------------------------------------------------

при запуске выводит тупо табличку.

на событие онклик запускаем ajaj1.php по нижним кнопкам

если нажать последовательно слева на право можно наблюдать паузу и наконец то вывод данных
в первую строку, потом во вторую, потом в третью.

а на самом деле первый самый медленный, второй быстре а третий самый быстрый
соответственно хотелось бы получить вывод наоборот.

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


или я что не понимаю .

Я создал 3 объекта- создались
создал 3 функции которые висят и ждут ответа от сервера
но вот в чём вопрос, почему команда send от другой копии объекта XMLHttpRequest ждёт пока
выполниться предыдущий объект, то есть пока не придут данные.

помогите исправить данный скрипт.
sax_ol
Цитата(Альберт @ 26:01:2008, 20:58 )
почему команда send от другой копии объекта XMLHttpRequest ждёт пока

это нормальная работа этого объекта
Альберт
Какие есть варианты по решению моего вопроса?
sax_ol
Мне не доводилось делать такую вот полную асинхронность. Могу предложить В динамике создавать под каждый запрос скрытый IFrame, и потом его разрушать, или другой подходящийобъект в DOM модели.

Не знаю, вашу специфику. Но а зачем понадобилась такая петрушка?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.