Httpxmlrequest
Автор Антон Белый задал вопрос в разделе Другие языки и технологии
Проблемка с ассинхронными XMLHttpRequest() - запросами и получил лучший ответ
Ответ от Digital Brain[гуру]
все таки мельком посмотрел-кажись перемення xhrReadyFlag неявно обявлена во функции xmlHttp.onreadystatechange где пытаетесь ее во True поставить -но переменная то локальная -тоесть во функции request она всегда будет false....вот и зацикл. выходит.... я б в класс ето оформил лучше. . хоть я и не веб програмист- вот микромодуль моей портальной системы для юзания аджакс -все явно работает-на нем 50% сайта пашет=) увлекся сильно=( если не нада функция обратного виз. то я пишу обычно пустую-типа SendAJAXMsg(xmlHttp,'test.php','function(){}') ; п. с ето пашет во браузерах опера, ие, ФФокс 100% - в других или слишком старых надо искать аналогы ето обекта ...в некоторых ваще его нет... пока у мну юзеров не нашлося у кого непахал аджакс моего сайта - следовательно тужитсо ненадо... и так норм. . //-----------------------------Модуль-------------------------- function CreateAJAXConnection(){ var xmlHttp = false; if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp=new XMLHttpRequest(); return xmlHttp; } } function SendAJAXMsg(xmlHttp,url,func) { xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange =func; xmlHttp.send(null); } function SendAJAXMsgPost(xmlHttp,url,func,msg) { xmlHttp.open("POST", url, true); xmlHttp.onreadystatechange =func; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(msg); } // тестовая функция function RecvMsg() { if(xmlHttp.status!=200){ alert("Ошибка однако "+HTTP.status); return; } if (xmlHttp.readyState == 4) { var response = xmlHttp.responseText; alert("ответ="+response); } }
зачем отправлять асинхронный запрос и блокировать процесс в ожидании ответа? лучше ведь показать какой-нибудь индикатор активности, а после получения ответа обновить страницу, используя callback. но если всё-таки оставлять запрос с блокированием процесса, то тогда есть синхронный запрос. для этого нужно в xmlHttp.open последний параметр установить в false: xmlHttp.open("POST", action, false); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send(params); alert(xmlHttp.responseText); // ответ уже здесь xmlHttp.open("GET", action + "?" + params, false); xmlHttp.send(null); alert(xmlHttp.responseText);