Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.16;
Скачать: CL | DM;

Вниз

вопрос знатокам JavaSccript   Найти похожие ветки 

 
aka   (2013-08-28 18:09) [0]

Использую XMLHttpRequest без сторонних библиотек. Можно ли получать динамически ответ через XMLHttpRequest сразу от двух серверных скриптов для отображения на одной странице?


 
Необычный порошок   (2013-08-28 18:11) [1]

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

в общем один запрос-один ответ.


 
aka   (2013-08-28 18:21) [2]

>>Необычный порошок   (28.08.13 18:11) [1]

по сему получается, что нельзя.

>>если будет один запрос, а сервер выполнит два скрипта и вернет два результата в одном ответе

Запроса два, имеет две такие конструкции к двум разным  скриптам:
 
if(xmlObject.readyState == 4 || xmlObject.readyState == 0) {  
    xmlObject.open("GET", "get.php", true);  
    xmlObject.onreadystatechange = getData;
    xmlObject.send(null);
}

function getData() {  
 if (xmlObject.readyState == 4) {
   if (xmlObject.status == 200) {

      var result = xmlObject.responseText;
     
      var list = document.getElementById("pr"+PRID);
      list.innerHTML = result;        
   }
 }
}
 


 
aka   (2013-08-28 18:22) [3]

А где кнопка "цитировать" делась ?


 
Необычный порошок   (2013-08-28 18:22) [4]

Нельзя конечно, если серверная сторона не твоя.
Если твоя, то хоть сто скриптов одним запросом не проблема.


 
aka   (2013-08-28 18:30) [5]

Понятно.

Если приходит несколько ответов хоть от одного скрипта, хоть от нескольких, то результаты предыдущих ответов теряюnся, остается последний результат.

Это имеется ввиду вставка результата таким образом:
     element.innerHTML = result;


 
Необычный порошок   (2013-08-28 18:33) [6]

Ничего и нигде не теряется.
Физически ответ один.
Но логически в одном физическом ответе могут содержаться стопитсот различных ответов.

data = decode(xmlObject.responseText);
element1.innerHTML = data.result1;
element2.innerHTML = data.result2;
...
element100500.innerHTML = data.result100500;


 
Ega23 ©   (2013-08-28 21:25) [7]


> Если приходит несколько ответов хоть от одного скрипта,
> хоть от нескольких, то результаты предыдущих ответов теряюnся,
>  остается последний результат.


У тебя не может быть несколько ответов.
1. установил соединение
2. послал запрос
3. получил ответ (либо ошибку)
4. разорвал соединение (если не keep-alive, в противном случае goto 2 пока не надоест).


 
aka   (2013-08-29 12:49) [8]


data = decode(xmlObject.responseText);
element1.innerHTML = data.result1;
element2.innerHTML = data.result2;
...
element100500.innerHTML = data.result100500;


Вот именно этот код написан как полноценно работающий вариант или просто иллюстрирующий идею???

Это каким образом нужно сформировать ответ чтобы так разбивать данные, имеется ввиду это:


element1.innerHTML = data.result1;
element2.innerHTML = data.result2;


По моему это можно сделать только на клиенте парся "большой кусок текста ответа" в ручную.


 
Styx   (2013-08-29 13:05) [9]


> Это каким образом нужно сформировать ответ чтобы так разбивать
> данные

http://ru.wikipedia.org/wiki/JSON


 
Ega23 ©   (2013-08-29 13:16) [10]


> По моему это можно сделать только на клиенте парся "большой
> кусок текста ответа" в ручную.


Ну у тебя ответ в xml или json приходит. Что ты в него на серверной стороне напихал и как ты это будешь на клиенте разбирать (и будешь ли) - это твоё личное дело.


 
Необычный порошок   (2013-08-29 15:12) [11]

Это каким образом

$res = array("success"=>true);
$res["result1"] = "Однажды, в студеную зимнюю пору...";
$res["result2"] = "Мой дядя самых лучших правил...";
$res["result3"] = "Пилите гири, Шура, пилите!";
$res["result100500] = array("ну"=>"вот", "как-то"=>"так");

echo json_encode($res);


 
aka   (2013-09-05 10:03) [12]

Спасибо за ответы, все понятно.
Ну давайте вот еще один вопрос маленький остался.

<div id="id1"></div>
<script type="text/javascript">getData("id1");</script>

<div id="id2"></div>
<script type="text/javascript">getData("id2");</script>

<div id="id3"></div>
<script type="text/javascript">getData("id3");</script>


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


 
Ega23 ©   (2013-09-05 10:28) [13]


<html>
<head>
<script language="javascript" type="text/javascript">
function initData() {
 getData(1);
 getData(2);
 getData(3);
}

window.onload = initData;

</script>
</head>
<body>
 .....
</body>  


Вроде так


 
aka   (2013-09-05 10:54) [14]

>> Ega23 ©   (05.09.13 10:28) [13]

Я так пробовал - эффект прежний. Вот так грузится:

function initData() {
getData(1); alert("1 - is load");
getData(2); alert("2 - is load");
getData(3);
}


а если вместо alert

function pausecomp(millis) {
 var date = new Date();
 var curDate = null;
 do { curDate = new Date(); }
 while(curDate-date < millis);
}


То все равно не работает


 
aka   (2013-09-05 10:57) [15]

Видать не ждет getData(2) пока отработает getData(1)


 
aka   (2013-09-05 11:15) [16]

Ага, вот тыком работает это

function initData() {
setTimeout("getData(1)", 100);
setTimeout("getData(2)", 200);
}


Но как оно будет работать при разной скорости соединения - не знаю


 
Ega23 ©   (2013-09-05 11:18) [17]

ТЫ какую проблему решаешь-то?


 
Styx   (2013-09-05 19:04) [18]

Переписать функцию getData таким образом, чтобы она создавала новое подключение?


 
Необычный Порошок   (2013-09-05 23:04) [19]

Видать не ждет getData(2) пока отработает getData(1)

Естественно не ждет.
И не должно ждать.
И хорошо что не ждет.


 
Обычный Порошок   (2013-09-05 23:09) [20]

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

не она, а он. (то есть ты).
Запросы к серверу видим.
А где обновление дивов - только догадываемся.
И догадываемся, что в обновлении у тебя косяк.



Страницы: 1 вся ветка

Текущий архив: 2014.02.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
2-1365850104
Катерина
2013-04-13 14:48
2014.02.16
Чтение из файла в ComboBox


2-1365333369
quart
2013-04-07 15:16
2014.02.16
gdi+ error


15-1378130372
Кристина
2013-09-02 17:59
2014.02.16
Странности Delphi 2010


15-1378280205
Empleado
2013-09-04 11:36
2014.02.16
Frederik Pohl


2-1366182901
ttt
2013-04-17 11:15
2014.02.16
Перемещение окна