Пустой массив jQuery $_FILES с плагином загрузки файлов blueimp в IE8/9

В StackOverflow есть много вопросов, связанных с плагином загрузки файлов Blueimp в IE8/9, но я не могу найти ничего, что имело бы прямое отношение к моей проблеме.

Я использую IE10 в режиме симулятора IE8/9. Каждый раз, когда массив PHP $_FILES пуст. Я включаю jquery.iframe-transport.js, и он загружается нормально. Ошибок JavaScript нет. Массив $_FILES просто пуст.

Я попытался закомментировать строку dataType: 'json',, которая была рекомендована в другом полусвязанном вопросе, но это не помогло.

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

Вот JavaScript:

$('#photo-file').fileupload(
    {
        url: 'photos/upload',
        dataType: 'json',
        autoUpload: true,
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
        maxFileSize: 8000000 // 8 MB
    }
)
.on(
    'fileuploadadd',
    function (e, data)
    {
        console.log('fileuploadadd');
        if (total_photos_queue < available_photos)
            total_photos_queue++;
        else
            return false;
    }
)
.on(
    'fileuploadsubmit',
    function (e, data)
    {
        console.log('fileuploadsubmit');
        progress_bar.width('0%');
        progress_bar.fadeIn();
    }
)
.on(
    'fileuploadprogressall',
    function (e, data)
    {
        console.log('fileuploadprogressall');
        var progress = parseInt(data.loaded / data.total * 100, 10);
        progress_bar.css('width', progress + '%');
    }
)
.on(
    'fileuploaddone',
    function (e, data) {
        console.log('fileuploaddone');
        $.each(
            data.result.files,
            function (index, file)
            {
                if (file.filename)
                    photo_uploaded(file.id, file.filename, file.subdir);
                else if (file.error)
                    console.log('error: ' + file.error);
            }
        );
    }
)
.on(
    'fileuploadstop',
    function (e) {
        console.log('fileuploadstop');
        progress_bar.fadeOut();
    }
)
.prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');

PHP просто (для отладки):

var_dump($_FILES); die();

person Gavin    schedule 15.03.2014    source источник


Ответы (1)


Я понял это, поэтому для тех, у кого есть похожая проблема, вот как я ее решил.

В моем событии .on('fileuploadsubmit', function(e, data){ .. }) я отключил <input type="file">, чтобы пользователи не могли отправлять файл, пока он уже загружается (я удалил этот фрагмент из примера фрагмента кода JavaScript в исходном сообщении, потому что не думал, что это имеет значение). IE8 и IE9 это не понравилось. Помещение кода отключения ввода в setTimeout() с задержкой 100 миллисекунд решило эту проблему.

person Gavin    schedule 16.03.2014