$ _FILES []在jQuery生成的表单中为空

时间:2017-01-17 12:12:50

标签: php jquery ajax forms upload

我在jQuery中生成了下一个表单:

$('.content').append('
<form name="make_new_model_release" enctype="multipart/form-data">
<input data-validate="validate" type="text" name="new_model_release_title" placeholder="Enter new model release title" />
<input type="file" name="newModelReleaseFile" id="newModelReleaseFile" />
<input type="submit" value="Create new model release" />
</form>');

服务器端简单:

var_dump($_FILES);

AJAX代码:

var data = form.serialize();
$.ajax({
    type: 'POST',
    dataType: 'json',
    url: formurl,
    data: data,
    beforeSend: function(data) {
        form.find('input[type="submit"]').attr('disabled', 'disabled');
    },
    success: function(data) {
        console.log(data);
    },
    complete: function(data) {
        form.find('input[type="submit"]').prop('disabled', false);
    }
});

提交$ _FILES数组后为空。

  1. 我检查了php.ini
  2.   

    file_uploads = On |   upload_max_filesize = 128M |的post_max_size = 128M

    1. 允许临时文件夹进行读写

    2. 我试图让data: new FormData(formId) - 没有改变,$ _FILES数组是空的。

1 个答案:

答案 0 :(得分:1)

如果你使用jQuery('#dailyActivity').serialize()
它不适用于<input type'file'>
看看这个jsFiddle 不起作用

和这一个.serialize()

  

来自文件选择元素的数据未被序列化。

请查看此https://stackoverflow.com/a/8758614/3425489

在你的情况下试试这个

要发送<input type'file'>,您可能需要尝试

var formData = new FormData($('form')[0]);

或指定formdata的确切数据

var formData = new FormData();
// Append your other Data
formData.append('newModelReleaseFile', $('input[type=file]')[0].files[0]); 

你的ajax电话将是

$.ajax({
    type: 'POST',
    url: formurl,
    data: formData,
    // THIS MUST BE DONE FOR FILE UPLOADING
    contentType: false,
    processData: false,
    beforeSend: function(data) {
        form.find('input[type="submit"]').attr('disabled', 'disabled');
    },
    success: function(data){
        console.log(data);
    },
    complete: function(data) {
        form.find('input[type="submit"]').prop('disabled', false);
    }
});