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

Тема в разделе "Web 2.0, AJAX, Ruby, RSS технологии", создана пользователем -, 26 янв 2008.

  1. Гость

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

    создадим файл ajaj.php
    Код (Text):
    <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
    Код (Text):
    <?
    include('php2json.php');
    $t[0]="first ".time();
    echo php2json($t);

    for ($i=0;$i<1000000*8;$i++){
    $aa=4;
    $tt=$aa*2;
    }
    ?>
    создадим файл ajaj2.php

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

    for ($i=0;$i<1000000*4;$i++){
    $aa=4;
    $tt=$aa*2;
    }
    ?>
    создадим файл ajaj3.php
    Код (Text):
    <?
    include('php2json.php');
    $t[0]="first ".time();
    echo php2json($t);
    ?>
    создадим файл php2json.php
    Код (Text):
    <?
    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 ждёт пока
    выполниться предыдущий объект, то есть пока не придут данные.

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

    Какие есть варианты по решению моего вопроса?
     
Загрузка...

Поделиться этой страницей