Параллельный запуск Ajax

  • Автор темы Guest
  • Дата начала
G

Guest

#1
господа есть такой пример.

создадим файл 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 ждёт пока
выполниться предыдущий объект, то есть пока не придут данные.

помогите исправить данный скрипт.
 
G

Guest

#2
Какие есть варианты по решению моего вопроса?