Асинхронный Ajax-запрос

A
На сайте с 18.10.2007
Offline
125
876

Добрый вечер, господа разработчики. Использую вывод информации в нескольких блоках на сайте через Ajax. При загрузке страницы идет обращение к обработчику и загрузка результатов в нужный блок. На странице есть еще вызов функции на событие "onClick".

Итак ситуация: пока на странице идет один вызов функции, срабатывающий при загрузке - всё работает. Когда я добавляю еще несколько вызовов, других обработчиков, обрабатывается только последний, все перед ним идущие выдают ошибку. При этом функция вызываемая по клику обрабатывается нормально, результаты загружаются в браузер как и должны.

Подключаемый JS, один товарищ сваял, я не силен в JavaScript'e:


function $(id) {return document.getElementById(id);}

var microb ={
info: 'microb v0.5'
}

microb.get = function(url, element_id) {
XMLHttp.open("get", url, true);
XMLHttp.onreadystatechange = function() {
if (XMLHttp.readyState == 4) {
if (XMLHttp.status == 200) {
var ajaxresult = XMLHttp.responseText;
$(element_id).innerHTML = ajaxresult;
} else {
alert("Вот эта ошибка выдается при загрузке страницы на 1 раз меньше, чем количество вызовов функции");
}
}
}
XMLHttp.send(null);
}

function createXmlHttp() {
if (typeof XMLHttpRequest != "undefinder") {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
var Versions = ["MSXML2,XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
for (var i = 0; i < Versions.length; i++) {
try {
var XmlHttp = new ActiveXObject(Version);
return XmlHttp;
}
catch (oError) {}
}
}
throw new Error("");
}
var XMLHttp = createXmlHttp();

microb.css = function(id_elements, css_style) {
var css = css_style;
var arr = id_elements.split(',');
for(si=0;si<arr.length;si++) {
var element = document.getElementById(arr[si]);
element.style.cssText = css;
}
}

Вызов в теле страницы:


<body>
<div>
<div id="firstDiv"> </div>
<div id="secondDiv"> </div>
<div id="thirdDiv">При загрузке страницы данные загрузятся только в этот, последний, блок</div>
<span class="expand-results"onClick="microb.get('first.php?view=full', 'firstDiv');">При клике по этому элементу данные загрузятся в браузер, как и должны</span>
</div>
<script type="text/javascript">
microb.get('first.php', 'firstDiv');
microb.get('second.php', 'secondDiv');
microb.get('third.php', 'thirdDiv');
</script>
</body>
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
C
На сайте с 04.02.2005
Offline
291
#1

Потому что ваши микробы нужно запускать в разных потоках

А то вы запустили одного, не дождались окончания, запускает второго.

Поменяйте, на что-нибудь другое, напртмер http://www.twilightuniverse.com/?page_id=243

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий