Как я могу исправить мой скрипт загрузки jQuery, чтобы не выдавать ошибку? - PullRequest
1 голос
/ 18 августа 2011

У меня есть форма загрузки файла.После отправки форма отправляет данные в iframe, а затем использует jQuery и PECL UploadProgress для получения прогресса загрузки файла.Когда сценарий запрашивает ход загрузки, а ответ равен нулю, файл завершил загрузку, сценарий затем считывает iframe для получения информации о файле.

Сценарий выполняется с интервалом, который очищается, когда ответnull.

Моя проблема со сценарием состоит в том, что, если файл загружается до выполнения запроса к файлам, произойдет ошибка, поскольку браузер попытается получить значение свойства, которое не имеетбыл установлен (ответ будет пустым).

Как проверить, завершил ли файл загрузку, прежде чем скрипт попытается получить значение свойства, которое не было установлено?

Есть ли какой-нибудь способ добавить прослушиватель в iframe, чтобы, когда он заканчивал загрузку, я мог немедленно отменить интервал и отобразить результат?

Я подумал проверить содержимое iframe перед запросом.и если есть данные, отмените запрос и отобразите данные, но это не похоже на работу.

Erили я вхожу в IE:

    Line: 37
    Error: Unable to get value of the property 'filename': object is null or undefined

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

function beginUpload()
{
    // Hide the upload form
    $("#uploadContainer").hide(function(){
        $(".fileProgress").show();
    });

    var interval = setInterval(function(){

        $.getJSON("upload.php?uploadProgressKey=" + uploadProgressKey, function(returnData){

            if($("#uploadFrame").contents().find("html body").html() !== "")
            {
                clearInterval(interval);
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            if(returnData == null)
            {
                // Upload complete as there is not data to report about upload
                // Stop the interval of checking the data
                clearInterval(interval);

                // Load result to content div
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }

            setUploadInformation(returnData.filename, returnData.bytes_uploaded, returnData.bytes_total, returnData.speed_average);
            setUploadBar(returnData.bytes_uploaded, returnData.bytes_total);
        });

    }, 800);
}

1 Ответ

2 голосов
/ 18 августа 2011

Не знаю, сработает ли это:

function beginUpload() {
    // Hide the upload form
    $("#uploadContainer").hide(function(){
        $(".fileProgress").show();
    });

    var checkProgress = function () {
        $.getJSON("upload.php?uploadProgressKey=" + uploadProgressKey, function(returnData){

            if($("#uploadFrame").contents().find("html body").html() !== "") {
                clearInterval(interval);
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            if(returnData == null) {
                // Upload complete as there is not data to report about upload
                // Stop the interval of checking the data
                clearInterval(interval);

                // Load result to content div
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }

            setUploadInformation(returnData.filename, returnData.bytes_uploaded, returnData.bytes_total, returnData.speed_average);
            setUploadBar(returnData.bytes_uploaded, returnData.bytes_total);
        });

    }
    var interval = setInterval(checkProgress, 800);
    checkProgress();
}

Ваш интервал начинается сначала после 800 мс. Я создал функцию checkProgress и вызываю ее сразу после инициализации интервала. Таким образом, вы начинаете проверять все сразу.

Тем не менее, я думаю, что вы можете встретить ту же ошибку, если первый вызов AJAX (getJSON) будет сделан после загрузки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...