douhoulei4706 2018-06-14 13:36
浏览 125
已采纳

使用Ajax发送表单数据时PHP不会获得$ _FILES

I'm trying to create an upload element on my website. What I'm trying to do is an upload button that instantly when the user picks a file from the computer it uploads it to the server.

This is my form:

<form id="createAlert" name="createAlert" enctype="multipart/form-data" method="POST" action="createAlert.php">
    <input name="title" type="text" class="input-medium" maxlength="36"></input>

    <textarea name="content" rows="7" cols="90" class="input-short" style="font-family: arial; width: 80%; resize: none; height: 250px"></textarea>

    <input name="push" type="checkbox"></input>

    <input enctype="multipart/form-data" name="img" id="img" size="35" type="file"/>

    <input class="submit-gray" type="submit" value="POST ALERT"/>
</form>

Here is my Javascript code that sends the file as a FormData object to an upload page (upload.php):

    $('#img').live('change', function() {
        var formData = new FormData();
        formData.append('file', $('#img')[0].files[0]);
        $.ajax({
            url : 'upload.php',
            type : 'POST',
            data : formData,
            enctype: 'multipart/form-data',
            success : function(data) {
                console.log(data);
                alert(data);
            },
            cache: false,
            contentType: false,
            processData: false
        });
    });

So far, so good - everything works fine. The problem is with the upload.php file that receives the FormData. Here is it's code (It's only a testing version it doesn't upload the file yet):

<?php
print file_get_contents('php://input');
var_dump($_FILES);
var_dump($_POST);

The problem is that the output of var_dump($_FILES); and var_dump($_POST) is two empty arrays, while in the file_get_contents('php://input') I get the file data.

Here is the output (I cut out the part with the content of the uploaded file...):

------WebKitFormBoundaryw4nmFcISqYuAWQOS
Content-Disposition: form-data; name="file"; filename="Sem Título-1.png"
Content-Type: image/png

//Here is the file I uploaded...

------WebKitFormBoundaryw4nmFcISqYuAWQOS--
array(0) {
}
array(0) {
}

I read dozens of answers to questions here and many solutions to the problem I have but none of them solved the problem.

What am I doing wrong? Why am I receiving the file just in the php://input but not using $_FILES?

Thank you!

  • 写回答

1条回答 默认 最新

  • duanfei1975 2018-06-14 14:37
    关注

    I would suggest you update the version of jQuery that you're using. live() was deprecated and removed from the source over 5 years ago now, and there have been several changes to the way data is serialised and encoded within $.ajax().

    It's possible the old version you're using doesn't have these updates and is not adding the FormData to the request in the correct manner.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵