"contentType: false"和"processData: false"在PHP中使POST为空。

3

我正在尝试使用AJAX将文件上传到我的服务器。AJAX调用正常工作,我的PHP正确返回结果,但是当我添加contentType: falseprocessData: false时,它就不再工作。

var formData = new FormData();
formData.append('image', input.files[0]);

$.ajax({
    url: "php/API.php",
    data: {action: "changeProfilePicture", profilePicture: formData},
    type: "POST",
    contentType: false, // if i remove this
    processData: false, // and this, and my form data in `data:` then POST is not empty
    success: function(resp) {
        console.log(resp)
    }
});

// inside of php/API.php
<?php
    // post is empty
    print_r($_POST);

    if(isset($_POST) && !empty($_POST)) {
        ...
    }
?>

1
好的,contentType 描述了发送到 API 的数据,processData 根据 contentType 设置数据应该如何处理。因此,contentType 不应为 false。 - wayneOS
移除 contentType 后,POST 仍然为空。 - pats47
1个回答

3
当使用jQuery.ajax发送multipart/formdata时,请求数据应该是FormData的一个实例。例如:
var formData = new FormData();
formData.append('image', input.files[0]);
formData.append('action', 'changeProfilePicture');
$.ajax({
    url: "php/API.php",
    data: formData,
    type: "POST",
    contentType: false, 
    processData: false,
    ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接