使用processData和contentType时Ajax响应0。输入= '文件[]'

时间:2015-01-17 18:11:37

标签: javascript php jquery ajax

HTML:

<input id="fileSelect" type="file" name="files[]" multiple="multiple" accept="image/*" />

JS:

alert( filesArray );
3 three images.// 
// [object File],[object File],[object File]

// new FormData object.
var formData = new FormData();
formData.append( 'files[]', filesArray );

jQuery.ajax
({
    url: ajaxurl, // uploadfile.php
    type: "POST",
    data:   {
                action: 'auto_post',
                form_data: formData
    },
    processData: false,
    contentType: false,
    success: function( data )
    {
       alert( data );
    },
    error: function( data )
    { }
});

当我不使用时:

processData: false,
contentType: false,

我得到了:(错误)

TypeError: 'append' called on an object that does not implement interface FormData.

现在该怎么办?我需要使用ajax将formData发送到php服务器端。

uploadfile.php

我需要在这里访问:

$_FILES["files"]["name"];

Ajax数据到达:

// Ajax Funtion.
function aap_auto_post()
{
    echo $_FILES['files']['name'];
    die();
}
add_action( 'wp_ajax_auto_post', 'aap_auto_post' );
add_action( 'wp_ajax_nopriv_auto_post', 'aap_auto_post' );

2 个答案:

答案 0 :(得分:2)

ajax请求中发送的所有值必须附加到FormData对象,而不仅仅是文件。此外,文件必须单独添加。

var formData = new FormData();
for (var i = 0; i < filesArray.length; i++){
    formData.append( 'files[]', filesArray[i]);
}
formData.append( 'action', 'auto_post');
...
data: formData,

答案 1 :(得分:0)

使用id选择这样的表格

$('form#YOUR_FORM_ID').submit(function(e){
 e.preventDefault();   
 var formData = new FormData($(this)[0]);
 $.ajax({
   url: 'YOUR_SERVER_URI',
   type: 'POST',
   data: formData,
   async: true,         
   success: function (data) { 
         alert(data);
   },
   cache: false,
   contentType: false,
   processData: false
   });  
      return false;

});

这将在服务器端处理$ _FILES。这样做是正常的。