Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
26:01:2008, 18:58
|
|
Новенький ![]() Группа: Программист Сообщений: 2 Регистрация: 26:01:2008 Пользователь №: 15 014 Специализация: ajaj Репутация: 0
|
господа есть такой пример.
создадим файл 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 ждёт пока выполниться предыдущий объект, то есть пока не придут данные. помогите исправить данный скрипт. |
|
Сообщение
#1
|
|
![]() |
|
|
26:01:2008, 21:34
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 878 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 28
|
Цитата(Альберт @ 26:01:2008, 20:58 ) почему команда send от другой копии объекта XMLHttpRequest ждёт пока это нормальная работа этого объекта |
|
Сообщение
#2
|
|
|
|
27:01:2008, 08:14
|
|
Новенький ![]() Группа: Программист Сообщений: 2 Регистрация: 26:01:2008 Пользователь №: 15 014 Специализация: ajaj Репутация: 0
|
Какие есть варианты по решению моего вопроса?
|
|
Сообщение
#3
|
|
|
|
27:01:2008, 09:33
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 878 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 28
|
Мне не доводилось делать такую вот полную асинхронность. Могу предложить В динамике создавать под каждый запрос скрытый IFrame, и потом его разрушать, или другой подходящийобъект в DOM модели.
Не знаю, вашу специфику. Но а зачем понадобилась такая петрушка? |
|
Сообщение
#4
|
|
![]() |
|
Текстовая версия | Сейчас: 5:07:2008 - 22:41 |