PHP 和 AJAX 文件上传:$_FILES 数组为空


PHP and AJAX file upload: $_FILES array empty

我正在尝试构建一个允许在PHP中上传文件的应用程序。上传文件时,应将下载链接附加到特定的div。我正在使用 ajax 调用来运行 php 脚本,以便我可以回显文件下载链接而不会卡在 php 页面上。(我希望这是有道理的。

这是 html:

<form action="php/upload.php" method="POST" enctype="multipart/form-data" id="uploadform">
                Select file to upload:
                <input type="file" name="fileToUpload" id="file">
                <input id="create" type="submit" value="Upload File">
</form>

下面是进行 ajax 调用的外部 javascript/jquery:

$(function () {
  $('form').on('submit', function (e) {
          //prevents reloading of page
          e.preventDefault();
          //get file data
          var file_data = $("#file").prop("files")[0];
          var form_data = new FormData();
          form_data.append('file', file_data);
          //run upload.php script and append result to draggable block
          $.ajax({
            type: 'post',
            url: 'php/upload.php',
            cache: false,
            data: form_data,
            success: function (data) {
              $( "#draggable"+i).append(data);
              i++;
            }
          });
        });
});

这是应该上传文件的外部 php 脚本:

<?php
    $target_path = "../uploads/";
    $target_path = $target_path . basename( $_FILES[ 'fileToUpload' ][ 'name' ] );
    if ( move_uploaded_file( $_FILES[ 'fileToUpload' ][ 'tmp_name' ] , $target_path ) ){
        //echo '<a href=' . $target_path . ' download>Download</a>';
    } 
    else {
        echo $target_path;
        //var_dump($_FILES);
    }

我收到以下错误:未捕获的类型错误:非法调用

问题来自尝试在 ajax 调用中传递"form_data"。我正在尝试这样做,因为一旦运行 php 脚本,$_FILES 数组就会变为空。我需要一种方法来确保我上传的文件存储在该数组中。

自己解决了。需要向 ajax 调用添加几件事:

$.ajax({
            type: 'post',
            url: 'php/upload.php',
            cache: false,
           ** contentType: false, **
           ** processData: false, **
            data: new FormData(this),
            success: function (data) {
              $( "#draggable"+i).append(data);
              i++;