Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с XMLHttpRequest слишком много запросов. (https://javascript.ru/forum/events/57111-problema-s-xmlhttprequest-slishkom-mnogo-zaprosov.html)

Alex116 20.07.2015 11:36

Проблема с XMLHttpRequest слишком много запросов.
 
Здраствуйте,

возникла следующая проблема..

function blablabla(str) {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp_move = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp_move = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp_move.onreadystatechange = function() {
            if (xmlhttp_move.readyState == 4 && xmlhttp_move.status == 200) {
		document.getElementById("inventory").innerHTML = xmlhttp_move.responseText;
            }
        }
        xmlhttp_move.open("GET","/m/inventory.php?id="+str,true);
        xmlhttp_move.send();  
}

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

Есть некоторые идеи, но хотелось бы услышать оптимальный вариант решения данной проблемы.

Спасибо заранее за помощь

P.S забыл добавить.. хотелось бы услышать решения при котором запросы оставались бы асинхронными.

KosBeg 20.07.2015 15:07

как вариант просто "заблокировать" предметы чтобы на них не можна было б нажать во время выполнения запроса)
А вообще никаких проблем(в даном куске кода) не должно быть....
PS: и много у вас пользователей с IE6? :D

Deff 20.07.2015 15:59

Alex116,
Типично допустимо 5-6 незавершенных;
Кладём запросы в массив очереди.
Отслеживать кол-во незавершенных запросов(на каждый новый запрос ставим инкремент счетчика, при завершении очередного запроса, счетчик декрементируем(и тестировать на меньше < 6).
Если условие не выполняется - ставим таймер setInterval и тестируем колво незавершенных, как выполнилось - исполняем очередной запрос из очереди.


Часовой пояс GMT +3, время: 17:26.