Форум: "Прочее";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];
Внизвопрос знатокам 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);
}
а если вместо alertfunction 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c