Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AJAX возможна ли одновременная загрузка нескольких xxx.PHP
 
 автор: Port_Artur1   (05.12.2007 в 23:40)   письмо автору
 
 

Делаю так, а загружается почему-то только последний скрипт
мне что писать по 2 функции function createHttpRequest() и function getRequest()
а если нужно до 12 вызовов скриптов одновременно - многовато будет
возможно ли это как то поправить? (только не в цикле выполняться должно одновременно)


</script> 
 
 
<script type="text/javascript"> 
var httpRequest = createHttpRequest(); 
var resultId = ''; 
function createHttpRequest() 

    var httpRequest; 
    var browser = navigator.appName; 

    if (browser == "Microsoft Internet Explorer") 
    { 
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    else 
    { 
        httpRequest = new XMLHttpRequest(); 
    } 

    return httpRequest; 

function sendRequest1() 

    var txt = document.getElementById("dog1").value; 
    var txt1 = document.getElementById("z1").value; 
    if (txt1=="ru"){  sendRequest('x1.php','result1',getRequest,txt,txt1);  }
    var txt2 = document.getElementById("z2").value; 
    if (txt2=="com"){sendRequest('x1.php','result2',getRequest,txt,txt2);}
   
    }

function sendRequest(file, _resultId, getRequestProc,_txt,txtx1) 

    resultId = _resultId; 
    document.getElementById(resultId).innerHTML = '<img src="24-0.gif" width="24" height="24">'; 

  

    httpRequest.open('post', file);
    httpRequest.onreadystatechange = getRequestProc; 
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=windows-1251");
    
    httpRequest.send("d="+_txt+"&z="+txtx1);
     


function getRequest() 

    if (httpRequest.readyState == 4) 
    { 
        document.getElementById(resultId).innerHTML = httpRequest.responseText; 
    } 


</script> 



<td valign="top"><p id="result1">po</p></td>
     <td valign="top"><p id="result2">dog</p></td>


   
 
 автор: bronenos   (05.12.2007 в 23:54)   письмо автору
 
   для: Port_Artur1   (05.12.2007 в 23:40)
 

я вам в прошлом посте поправил, как надо правильнее
и писать снова не собираюсь... (надо создавать объект каждый раз для запроса)

если их несколько то в массив кладите

   
 
 автор: Port_Artur1   (06.12.2007 в 00:00)   письмо автору
 
   для: bronenos   (05.12.2007 в 23:54)
 

да нет всё работает - одновременно не получается
БУДУ думать

Вот сделал так
var httpRequest = createHttpRequest(); 
var httpRequest1 = createHttpRequest();
 var resultId = ''; 
function createHttpRequest() 

    var httpRequest; 
    var browser = navigator.appName; 

    if (browser == "Microsoft Internet Explorer") 
    { 
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    else 
    { 
        httpRequest = new XMLHttpRequest(); 
    } 

    return httpRequest; 




остальные функции в экземплярах - нехочет работать

   
 
 автор: bronenos   (06.12.2007 в 01:10)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 00:00)
 

не в хорошем месте объект создаете
мой пост прочитайте

   
 
 автор: Port_Artur1   (06.12.2007 в 08:38)   письмо автору
 
   для: bronenos   (06.12.2007 в 01:10)
 

если писать так как вы предложили


var httpRequest = createHttpRequest();   
   httpRequest.open('post', file); 


то в функции GetRequest возникает ошибка "httpRequest - отсутствует определение"

Ниже Весь ваш пример

   
 
 автор: Port_Artur1   (06.12.2007 в 08:38)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 08:38)
 


<script type="text/javascript">   
var resultId = '';   
function createHttpRequest()   
{   
    var httpRequest;   
    var browser = navigator.appName;   

    if (window.ActiveXObject)   
    {   
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");   
    }   
    else   
    {   
        httpRequest = new XMLHttpRequest();   
    }   

    return httpRequest;   
}  

function sendRequest(file, _resultId, getRequestProc)   
{   
    resultId = _resultId;   
    document.getElementById(resultId).innerHTML = '<img src="24-0.gif" width="24" height="24">';   

    var txt = document.getElementById("d1").value;   
    var txt1 = document.getElementById("zu1").value;   
    var txt2 = document.getElementById("zm1").value;   
    var txt3 = document.getElementById("zt1").value;   
    var txt4 = document.getElementById("zo1").value;   
    var txt5 = document.getElementById("zi1").value;   
    var txt6 = document.getElementById("zfs1").value;    

var httpRequest = createHttpRequest();   
   httpRequest.open('post', file);  
    httpRequest.onreadystatechange = getRequestProc;   

      
    httpRequest.send("dwer="+txt);  
    httpRequest.send("weru="+txt1);   
    httpRequest.send("werm="+txt2);      
    httpRequest.send("wtetet="+txt3);  
    httpRequest.send("erg="+txt4);  
    httpRequest.send("ert="+txt5);  
    httpRequest.send("ewrtfo="+txt6);  

}   

function getRequest()   
{   
    if (httpRequest.readyState == 4)   
    {   
        document.getElementById(resultId).innerHTML = httpRequest.responseText;   
    }   
}   

</script>   


<input id="doert1" name="d345" type="TEXT" class="check" size="21" maxlength="63" onkeypress="if (event.keyCode==13) sendRequest('ddddd.php','result',getRequest);" >  


<p id="result">Здесь будет результат запроса</p>

   
 
 автор: Port_Artur1   (06.12.2007 в 08:52)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 08:38)
 

Да, что то- не удаётся от этого избавиться?

   
 
 автор: bronenos   (06.12.2007 в 10:41)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 08:52)
 

пока что я не вижу проблем
но то. что надо создавать объект каждый раз это точно...

ща посмотрю, где может быть проблема (вы, кстати, с какого браузера сидите?)

   
 
 автор: Port_Artur1   (06.12.2007 в 10:48)   письмо автору
 
   для: bronenos   (06.12.2007 в 10:41)
 

сижу с Opera а проверяю в IE

   
 
 автор: bronenos   (06.12.2007 в 10:51)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 08:52)
 

перед объявлением функции createHttpRequest напишите
var httpRequest;

чтобы сделать переменную глобальной
а то обработчик ее не видит
и в функции отправки запроса при создании объекта уберите слово var

а в функции создания лучше дайте переменной другое имя...

   
 
 автор: Port_Artur1   (06.12.2007 в 11:31)   письмо автору
 
   для: bronenos   (06.12.2007 в 10:51)
 

Загружается почему то только первый запрос а ответ отображается аж последнем (в данном случае во втором, но пробовал и 3 и 7 запросов всё-равно )
первый запрос - результат получаем только в последнем а первые несколько пустые

Поскольку сервер на обработку скрипта затрачивает какое=то время а запросы проходят практичеки одновременно - поэтому наверное так и получается , Как этого избежать!

может им как то определить индексы или это в данном случае не поможет?

   
 
 автор: bronenos   (06.12.2007 в 14:21)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 11:31)
 

ну так если используется одна переменная для всех запросов...
загоните в массив...

   
 
 автор: Port_Artur1   (06.12.2007 в 15:46)   письмо автору
 
   для: bronenos   (06.12.2007 в 14:21)
 

<script type="text/javascript"> 

var httpRequest;
 var resultId = ''; 
function createHttpRequest1() 

    var httpRequest1; 
    var browser = navigator.appName; 

    if (browser == "Microsoft Internet Explorer") 
    { 
        httpRequest1 = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    else 
    { 
        httpRequest1 = new XMLHttpRequest(); 
    } 

    return httpRequest1; 

function sendRequest1(file, _resultId, getRequestProc1) 
{    var txt = document.getElementById("dq1").value; 
    var txt1 = document.getElementById("zr1").value; 
    if (txt1=="ru"){sendRequest('dx1.php','result1',getRequest,txt,txt1);}
    var txt2 = document.getElementById("zm1").value; 
    if (txt2=="com"){sendRequest('dx1.php','result2',getRequest,txt,txt2);}
   var txt3 = document.getElementById("zt1").value; 
    if (txt3=="net"){sendRequest('dx1.php','result3',getRequest,txt,txt3);}
 
    }
function sendRequest(file, _resultId, getRequestProc,_txt,txtx1) 

    resultId = _resultId; 
    document.getElementById(resultId).innerHTML = '<img src="24-0.gif" width="24" height="24">'; 

   httpRequest = createHttpRequest1(); 
    
    httpRequest.open('post', file);
    httpRequest.onreadystatechange = getRequestProc; 
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=windows-1251");
    
    httpRequest.send("d="+_txt+"&n="+txtx1);
     


function getRequest()  
{  
    if (httpRequest.readyState == 4)  
    {  
        document.getElementById(resultId).innerHTML = httpRequest.responseText;  
    }  
}  


</script> 

<input id="dq1" name="dq" type="TEXT" class="check" size="21" maxlength="63" onKeyPress="sendRequest1('domen_x1.php','result1',getRequest);" >



я извиняюсь но с массивами в JS что то туго поробовал типа везде httpRequest[n]
но по моему не то

   
 
 автор: Port_Artur1   (06.12.2007 в 15:51)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 15:46)
 

function getRequest() встречается в Input так вот для передачи параметра в неё для httpRequest[n] - в Input возникает ошибка что параметр не определён

а как я его определю если он передаётся в скрипте?


function getRequest(n)   
{   
    if (httpRequest[n].readyState == 4)   
    {   
        document.getElementById(resultId).innerHTML = httpRequest[n].responseText;   
    }   
}  

   
 
 автор: bronenos   (06.12.2007 в 16:43)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 15:51)
 

у меня происходит все в библе - она и заботится о id, потому... сложно сказать как пользоваться индексами без участия серверной стороны.... если кто скажет, я смогу у себя отказаться в ряде скрипта от сервера...

так что не могу сказать вот так вот... писать это дело долго

   
 
 автор: Port_Artur1   (06.12.2007 в 17:21)   письмо автору
 
   для: bronenos   (06.12.2007 в 16:43)
 

НУ может кто ещё знает как это сделать?

   
 
 автор: bronenos   (06.12.2007 в 17:52)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 17:21)
 

скорее всего не получится делать несколько запросов сразу без участия серверной стороны.. я не вижу способов это сделать... хотя я в js уже твердо стою....

   
 
 автор: Port_Artur1   (06.12.2007 в 21:32)   письмо автору
 
   для: bronenos   (06.12.2007 в 17:52)
 

Поможите люди добрые я сам не соображу как но очень хочется

Взываю к Cheops!!!

   
 
 автор: bronenos   (06.12.2007 в 21:40)   письмо автору
 
   для: Port_Artur1   (06.12.2007 в 21:32)
 

можно с оперы осуществить (возможно, и с фф), но вот с ие - нет
а я предлагаю тока кроссбраузерные варианты

   
 
 автор: Port_Artur1   (07.12.2007 в 07:59)   письмо автору
 
   для: bronenos   (06.12.2007 в 21:40)
 

рою интернет уже какой день ничего подобного моему случаю пока не встречал!

   
 
 автор: Port_Artur1   (07.12.2007 в 08:27)   письмо автору
 
   для: Port_Artur1   (07.12.2007 в 07:59)
 

может можно как то от сюда оттолкнуться
http://softtime.ru/forum/read.php?id_forum=4&id_theme=36588&page=10

 автор: coloboc66   (26.04.2007 в 16:21)   письмо автору     
     
Тогда аяксом два раза отправлять данные одному и тому же РНР-файлу, но с разными параметрами content type в setRequestheader () аякса. Больше ничего в голову не приходит. Еще нужно уточнить- возможно ли вообще отправлять рисунки аяксом...

   
 
 автор: bronenos   (07.12.2007 в 12:42)   письмо автору
 
   для: Port_Artur1   (07.12.2007 в 07:59)
 

я считаю бесполезно рыть
надо самому думать в даннлй ситуации...

   
 
 автор: Port_Artur1   (07.12.2007 в 14:46)   письмо автору
 
   для: bronenos   (07.12.2007 в 12:42)
 

Дык в JS мне особенно то и нечем , но работаю над собой, потому вот и спрашиваю!

   
 
 автор: bronenos   (07.12.2007 в 15:11)   письмо автору
 
   для: Port_Artur1   (07.12.2007 в 14:46)
 

Напиши мне в асю (4110863) - поговорим =)
(тока я ща есть ухожу, поэтому могу не ответить в течение минут десяти), и еще напиши что ты с форума.. а то спама много... чищу каждого второго

   
 
 автор: Eugene77   (07.12.2007 в 18:51)   письмо автору
 
   для: bronenos   (07.12.2007 в 15:11)
 

Ну вот...
Такое интересное обсуждение ушло со страниц форума.

   
 
 автор: bronenos   (07.12.2007 в 19:29)   письмо автору
 
   для: Eugene77   (07.12.2007 в 18:51)
 

а я наоборот думал никому не надо ))
ладно, тогда отмена))
ща подумаю как сделать решение вашей (и моей по соседству) проблеме

   
 
 автор: bronenos   (07.12.2007 в 20:03)   письмо автору
 
   для: Eugene77   (07.12.2007 в 18:51)
 

вот для оперы и лисы я нашел решение, а вот ослик пока под вопросом
решение складывается к сохранению в массиве обработчиков объектов, а самим объектам присвоения id
вот пример

/* Хранилище уникальных обработчиков */
var processes = {};

/* Обработчик для всех запросов */
function multiprocess()
{
  /* Запрос завершен и страница загружена? */
  if (this.readyState < 4) continue;

  /* Запускаем пользовательскую функцию для данного запроса */
  if (processes[this.id])
  {
    processes[this.id](this.responseText);
    delete processes[this.id];
  }
}

var obj = new XMLHttpRequest();
var id = Math.round(Math.random() * 1000); /* в реальном коде надо сделать проверку на существующий id */

obj.id = id;
obj.onreadystatechange = multiprocess;
processes[id] = function(r) { alert("Получен ответ: "+r); }

   
 
 автор: Port_Artur1   (08.12.2007 в 11:38)   письмо автору
 
   для: bronenos   (07.12.2007 в 20:03)
 

Спасибо за пример посмотрю позже надо съездить по делам а вот только напишите что такое лиса и ослик

   
 
 автор: bronenos   (08.12.2007 в 12:07)   письмо автору
 
   для: Port_Artur1   (08.12.2007 в 11:38)
 

FireFox, IE соответственно

   
 
 автор: Port_Artur1   (08.12.2007 в 20:34)   письмо автору
 
   для: bronenos   (08.12.2007 в 12:07)
 

Например, Internet Explorer разрешает только 2 одновременных AJAX-запроса в данный момент времени. Другие браузеры могут разрешать большее число запросов, но обычно от 3 до 5.

http://joomart.org/component/option,com_smf/Itemid,2/topic,163.msg238/

Ну думаю что дальше рыть действительно без вариантов - т.к. мне надо было 6 запросов одновременно после этого теряется смысл идеи как читал 1 запрос на 10кБ БЫСТРЕЕ ЧЕМ 10 ПО 1Кб нО ЕСЛИ КТО -ТО ВСЁ ЖЕ РЕШИТ ДАННЫЙ ВОПРОС ТО БУДУ РАД БУДУ БЛАГОДАРЕН ЕСЛИ ИЗВЕСТЯТ МЕНЯ ОБ ЭТОМ icq 296001157

   
 
 автор: bronenos   (08.12.2007 в 21:16)   письмо автору
 
   для: Port_Artur1   (08.12.2007 в 20:34)
 

а ты уверен, что запрос к одному скрипту не заменит эти 6 запросов?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования