Как получить прогресс от XMLHttpRequest

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
131
задан 3 revs, 2 users 100%Pete 31 May 2012 в 21:01
поделиться

6 ответов

Существует хорошее обсуждение Индикатора хода выполнения для шаблона Ajax здесь:

http://ajaxpatterns.org/Progress_Indicator

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

8
ответ дан 24 November 2019 в 00:19
поделиться

Для общего количества, загруженного, кажется, нет способа обработать это, но существует что-то подобное тому, что Вы хотите для загрузки. После того как readyState равняется 3, можно периодически запрашивать responseText для получения всего содержания, загруженного, насколько Строка (это не работает в IE), вплоть до всего этого доступна, в которой точке это перейдет к readyState 4. Общие байты, загруженные в любой момент времени, будут равны общим байтам в строке, сохраненной в responseText.

Для все или ничего приближаются к вопросу о загрузке, так как необходимо передать строку для загрузки (и возможно определить общие байты того), общие байты послали за readyState 0, и 1 будет 0, и общее количество для readyState 2 будет общими байтами в строке, в которой Вы передали. Общие байты, и отправленные и полученные в readyState 3 и 4, будут суммой байтов в исходной строке плюс общие байты в responseText.

5
ответ дан 24 November 2019 в 00:19
поделиться

Если Вы имеете доступ к своей апачской установке и доверяете стороннему коду, можно использовать апачский модуль прогресса загрузки (при использовании апача; существует также модуль прогресса загрузки nginx ).

Иначе, необходимо было бы записать сценарий, который можно поразить из полосы для запроса состояния файла (проверяющий размер файла tmp файла, например).

существует некоторая работа, продолжающаяся в firefox 3, которому я верю для добавления поддержки прогресса загрузки браузеру, но это не собирается входить во все браузеры и широко приниматься некоторое время (больше - жалость).

2
ответ дан 24 November 2019 в 00:19
поделиться

Единственный способ сделать это с чистым JavaScript должно реализовать некоторый механизм опроса. Необходимо будет отправить ajax запросы в фиксированные интервалы (каждые 5 секунд, например) для получения числа байтов, полученных сервером.

А более эффективный путь состоял бы в том, чтобы использовать флэш-память. Компонент гибкого провода FileReference dispatchs периодически событие 'прогресса', содержащее число байтов уже, загружается. Если необходимо придерживаться JavaScript, мосты доступны между actionscript и JavaScript. Хорошие новости - то, что эта работа была уже сделана для Вас :)

swfupload

, Эта библиотека позволяет регистрировать обработчик JavaScript на событии прогресса флэш-памяти.

Это решение имеет hudge преимущество не требования aditionnal ресурсы на стороне сервера.

-7
ответ дан 24 November 2019 в 00:19
поделиться

Firefox поддерживает события загрузки XHR .

9
ответ дан 24 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: