无法使用 $ajax() 在 PHP 中上传文件

Posted

技术标签:

【中文标题】无法使用 $ajax() 在 PHP 中上传文件【英文标题】:Can't upload file in PHP using $ajax() 【发布时间】:2020-03-14 03:45:30 【问题描述】:

我试图使用带有 jQ​​uery 的 ajax() 函数的 php 在服务器上上传文件。下面是我正在尝试的代码。当我在没有 jQuery 的情况下在同一页面上编写 PHP 代码时,一切正常,所以毫无疑问,文件上传工作正常。

HTML


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
    $(function() 
        $("form").submit(function(e)
            e.preventDefault();

            var fd = new FormData();    
            fd.append("files", $("#fileinput").prop("files"));
            $.ajax(
                url: "imgupload_.php", 
                type:"POST",
                processData: false,
                contentType: false,
                data: fd,
                success: function(result)
                    alert(result);
                
            );
        );
    );
</script>
<form method="POST" action="#" enctype="multipart/form-data">
    <input type='file' name='files' id="fileinput"/>
    <input type='submit' value='Submit' name='submit'/>
</form>

imgupload_.php

if(isset($_POST["submit"])) 
    $target_dir = "images/";
    $target_file = $target_dir . basename($_FILES["files"]["name"]);

    if (move_uploaded_file($_FILES["files"]["tmp_name"], $target_file)) 
        echo "The file ". basename( $_FILES["files"]["name"]). " has been uploaded.";
     else 
        echo "Sorry, there was an error uploading your file.";
    

如果您想了解任何其他信息,请在下方评论。

【问题讨论】:

【参考方案1】:

您正在检查if(isset($_POST["submit"])),但未设置。

而不仅仅是这样:

var fd = new FormData();

使用它来拉入任何非文件输入值(例如您的提交按钮。)

var fd = new FormData(this);

【讨论】:

是的。如果我用if($_SERVER["REQUEST_METHOD"] == "POST") 替换if(isset($_POST["submit"])) 并在FormData 中添加this,它可以工作。谢谢先生。

以上是关于无法使用 $ajax() 在 PHP 中上传文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Wordpress 中上传 Ajax 文件 - 无法传递 FormData

从引导模式以 PHP 和 Ajax 上传文件

使用 ajax 在 Yii 中上传文件

使用 PHP 上传基本的 jQuery Ajax 文件

ajax多次上传doenst php文件处理

php如何使用editor上传视频 最好贴下代码