使用formData上传文件会返回未定义的文件数组

时间:2016-12-29 22:35:31

标签: javascript php jquery form-data

我从print_r($ _ POST)获取未定义,它在同一个php页面上发布。

user = forum.users.first
user.permissions

已编辑 - 添加了调用upload_banner函数的部分

HTML

Array ( [file] => undefined )

JS

<form enctype="multipart/form-data" id="banner_form" class="form-horizontal" role="form" action="">
  <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
  <input id="file" name="file" type="file" class="filestyle" accept="image/jpeg,image/gif,image/png">
</form>

json as datatype导致im从php端返回数组,没有发布其他代码导致我已经在文件上传部分出现问题

PHP

$('#submit_btn').click(function(e){
    e.preventDefault();

    var date = document.getElementById('datepicker').value;
    var title = document.getElementById('title').value;
    var content = document.getElementsByClassName('note-editable')[0];

    if(date == "" || title == "") {
      alert("Please fill in the required fields");
      return false;
    }
    else {

        var cfm = confirm("Confirm Submit Changes?");
        if(cfm === true)
        {

          var editarea = content.innerHTML;

          $.post ("functions/add_upcoming.php",{date: date,title: title,sm_content: editarea},
            function(data) {
          });

          upload_banner();
        }
        else
        {
          return false;
        }
      }
  });




function upload_banner() {
    var form_data = new FormData($('#banner_form')[0]);
    form_data.append('file', $('input[type=file]')[0].files[0]);

      $.ajax({
        url: "upcomingevents.php?p=73",
        contentType: false,
        processData: false,
        dataType: 'json',
        data: form_data, 
        type: 'post',
        success: function(data) { },
        contentType: false,
        processData: false
    });
}
我在这做错了吗?

2 个答案:

答案 0 :(得分:0)

考虑到您没有处理程序运行的提交按钮,您的功能甚至不会被调用。 应该是这样的:

<form enctype="multipart/form-data" id="banner_form" class="form-horizontal" role="form" action="">
  <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
  <input id="file" name="file" type="file" class="filestyle" accept="image/jpeg,image/gif,image/png">
  <input type="submit" id="submit_btn"/>
</form>

你的JS中也有语法错误,第二组});不需要关闭点击处理程序。

的jsfiddle: https://jsfiddle.net/sggf82am/2/

答案 1 :(得分:0)

FormData设置不正确,应为:

var form_data = new FormData( );
form_data.append('file', $('input[type=file]')[0].files[0]);

你确定ajax提到的网址是否正确?

为什么有查询参数( ?p=73 ),因为您正在进行发布而不是获取

最后,尝试通过

打印回复

success: function(data) { alert(JSON.stringify(data))},