Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2011, 16:35
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

XMLHTTP индикация загрузки во время запроса
Всем доброго времени суток...
Для формирования HTTP запросов, программа использует COM-объект "Msxml2.XMLHTTP.6.0" (далее ObjXmlHttp)
Некоторые из сформированных POST-запросов, не что иное как передача байтов файла в теле запроса ('binary').
В то время как выполняется метод
ObjXmlHttp.Send(body)

хотелось бы отображать состояние загрузки...
Ожидая
ObjXmlHttp.readyState = 4

хотелось бы отображать корректное состояние загрузки, количество переданных байт... но никак не пойму можно ли такую информацию получить от объекта "Msxml2.XMLHTTP.6.0", и если да то как ?

PS: Решился спросить здесь, так как JavaScript-ерам использование этого объекта вроде как знакомо.
Ответить с цитированием
  #2 (permalink)  
Старый 27.06.2011, 16:57
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

http://www.redips.net/javascript/ajax-progress-bar/
Ответить с цитированием
  #3 (permalink)  
Старый 27.06.2011, 22:29
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

function Ajax(){
	*!*Content.innerHTML = '<img src="img/loading.gif" alt="Загрузка...">';*/!*
                 ...... //ObjXmlHttp.send(), путь к файлу и другое...
	ObjXmlHttp.onreadystatechange = function () {
		if (ObjXmlHttp.readyState == 4){
			if (ObjXmlHttp.status == 200) {
				*!*Content.innerHTML = ObjXmlHttp.responseText*/!*
			}
		}
	}
}
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2011, 12:25
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

DreamTheater,
подскажи где я могу найти "референс" для конструкции
ObjXmlHttp.responseXML.getElementsByTagName('PROGRESS')[0].firstChild;

я кое-что нашел, но не уверен...
PS:
...responseXML.getElementsByTagName('PROGRESS')...
Такая конструкция верна для объекта "Msxml2.XMLHTTP.6.0" сама по себе, или это только для JavaScript ?
Если я работаю с COM-объектом, я тоже могу обращаться к методам и свойствам XML DOM, для объекта "Msxml2.XMLHTTP.6.0" ?

извините, я немного запутался... я работаю с "Msxml2.XMLHTTP.6.0" из другого языка, не из JavaScript
Ответить с цитированием
  #5 (permalink)  
Старый 28.06.2011, 15:51
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

getElementsByTagName() - это метод доступа к элементам DOM сугубо на языке JavaScript, к объекту Msxml2.XMLHTTP.6.0 он не имеет никакого отношения. Думаю, на любом языке программирования существует тьма всевозможных XML-парсеров, поэтому если язык не предполагает встроенных средств для навигации по XML, как в JS, тогда воспользуйтесь одним из них.
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2011, 08:37
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

DreamTheater,
Спасибо... я наконец-то уловил суть.
Ответить с цитированием
  #7 (permalink)  
Старый 30.06.2011, 10:18
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

Есть XML парсер и т.д.
НО...

1) объект "Msxml2.XMLHTTP.6.0" имеет специальный метод responseXML который якобы и должен мне вернуть тот самый xml который необходимо разобрать
хотя опять-же я не могу понять противоречия... т.к. описание этого метода дословно такое:
"Текст ответа на запрос в виде XML, который затем может быть обработан посредством DOM.
Если состояние не 4, возвращает null.
"
Так а состояние = 4 это значит, что запрос завершен и как в приведенном вами примере:
request_handler = function () {
    var level;
    if (request.readyState === 4) {   // if state = 4 (operation is completed)
        if (request.status === 200) { // and the HTTP status is OK
            // get progress from the XML node and set progress bar width and innerHTML
            level = request.responseXML.getElementsByTagName('PROGRESS')[0].firstChild;
            progress.style.width = progress.innerHTML = level.nodeValue + '%';
        }
        else { // if request status is not OK
            progress.style.width = '100%';
            progress.innerHTML = 'Error:[' + request.status + ']' + request.statusText;
        }
    }
};

как это отрабатывает в процессе запроса я не могу никак понять... ведь пока readyState <> 4
там должен быть null... и строка
level = request.responseXML.getElementsByTagName('PROGRESS ')[0].firstChild;
должна спровоцировать исключение...

2) на каком бы этапе я не обращался к методу responseXML, но все время возвращает пустоту (nothing / "")...
и во время запроса и после его завершения...

Подскажите какова роль сервера в этом случае, должно ли на нем что-то такое специфическое быть реализовано... или от сервера здесь ничего не зависит ?

Последний раз редактировалось RUVATA, 30.06.2011 в 12:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать loader во время ajax запроса? FRIE jQuery 17 08.10.2014 09:42
Время выполнения запроса Andrei jQuery 2 01.12.2010 11:32
Обработка ответа во время загрузки. JAre AJAX и COMET 2 11.10.2010 16:05
время загрузки window.open окна Oiron Events/DOM/Window 2 17.09.2010 14:10
Время загрузки сайта guffer Events/DOM/Window 1 30.07.2010 21:17