Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прогресс загрузки, Ajax 
:(
    Опции темы
omka
Дата 21.11.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.11.2007

Репутация: нет
Всего: нет



Подскажите плиз.
Столкнулся с такой проблемой:
Есть загрузчик. Он производит загрузку папок со всеми файлами в контекст сервера. Т.к. файлов может быть до нескольких тысяч, необходимо сделать индикацию прогресса загрузки (те через определённые промежутки времени процент загрузки обновляется). Обновление естественно Ajax. Написал скрипт (см. код ниже). Он работает, но только в FireFox. В IE6 есть трабл - данные отображаются только после первого обращения к серверу, на последующие запросы прогресс просто убирается со страницы. После дебага понял что дело в особенности ActiveX. req.responseText - ничего не возвращает.
Код

var req = null;
var area = null;
var READY_STATE_COMPLETE = 4;

function sendRequest(url, params, HttpMethod) {
    if (!HttpMethod) {
        HttpMethod = "GET";
    }
        initXMLHTTPRequest();
    if (req) {
        req.onreadystatechange = onReadyState;
        req.open(HttpMethod, url, true);
        req.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
        req.send(params);
    }
}

function initXMLHTTPRequest() {
    if (window.XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
            try {
                req = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    }
}

function onReadyState() {
    var ready = req.readyState;
    var data = "";
    if (ready == READY_STATE_COMPLETE) {
        // Чтение данных ответа
        data = req.responseText;
        toConsole(data);
    }
}

function toConsole(data) {
    if (area != null) {
        for(var i = 0; i < area.childNodes.length; i++){
            area.removeChild(area.childNodes[i]);
        }
        var newline = document.createElement("<div>");
        area.appendChild(newline);
            newline.innerHTML = data;
        }
}

function prepareData() {
    area = document.getElementById("progress");
    sendRequest("/project/action.do?progress");
}

function timer(){
    setTimeout("timer();", 5000);
    prepareData();
}


На onload страницы стоит вызов timer(). Она в свою очередь через каждые 5 сек. вызывает сама себя. Напомню что в FireFox всё работает без проблемм. В IE data = req.responseText; возвращает "".
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0960 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.