Как заставить загрузку файлов работать с jQuery и xhr2 (возвращается пустой $ _FILES)

Я использую метод $ .ajax и xhr2 для загрузки файла с помощью метода $ .ajax.

Когда я использую любой стандартный объект для данных параметра $ .ajax, в $ _POST (php) возвращается правильный непустой массив.

JS:

data : {name:"john doe"}

PHP: print_r ($ _ POST)

Array
(
    [name] => john doe
)

Однако, когда я присваиваю объект formData данным параметра, чтобы загрузить файл, в $ _FILES (php) возвращается пустой массив.

JS:

data : new FormData(document.getElementById('fileupload'))

PHP: print_r ($ _ ФАЙЛЫ)

Array
(
)

Мой html-код:

<form enctype="multipart/form-data">
<div id="myform">
    <input type="file" name="fileupload" id="fileupload" />

    <div id="submit">UPLOAD</div>
</div>
</form>

Мой код jQuery:

$('#submit').click(function(){

    var formData = new FormData(document.getElementById('fileupload'));

    $.ajax({
           url : "upload.php",
           type: "POST",
           data : formData,
           xhr: function(){
                myXhr = $.ajaxSettings.xhr();
                return myXhr;
            },
           success: function(data, textStatus, jqXHR){
                console.log(data);
            },
           cache: false,
           contentType : false,
           processData: false
        });
});

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


person Vincent    schedule 06.06.2014    source источник
comment
Вы пробовали var formData = new FormData(document.getElement('form'));   -  person Vinz243    schedule 06.06.2014
comment
getElement не является допустимой функцией javascript   -  person Vincent    schedule 06.06.2014
comment
Ой, извините, функция, возвращающая элемент по его имени (чтобы получить форму).   -  person Vinz243    schedule 06.06.2014


Ответы (1)


var element = document.getElementById("fileupload");
        var myfiles= element.files;
        var data = new FormData();
        var i=0;
        for (i = 0; i < myfiles.length; i++) {
                                data.append('file' + i, myfiles[i]);
                            }

                     $.ajax({
                            url: 'load.php', 
                            type: 'POST',
                            contentType: false, 
                            data: data, 
                            processData: false, 
                            cache: false
                        }).done(function(msg) {
                           //do something
                        });

Исходный код: http://sw.solfin.net.co/index.php/programacion/php-y-jquery

person Alexander Ceballos    schedule 06.06.2014
comment
Большое спасибо, все работает. Я неправильно создавал значение параметра данных. - person Vincent; 07.06.2014