
本文档旨在解决在使用 Ajax 和 FormData 进行文件上传时,同时提交文本输入数据遇到的常见问题,例如 PHP 端无法获取 `$_POST` 和 `$_FILES` 数据。我们将详细介绍如何正确配置 HTML 表单、JavaScript 代码以及 PHP 后端,以实现完整的文件和文本数据上传功能。
首先,确保你的 HTML 表单正确设置了 enctype 属性,并且 name 属性在表单中是唯一的。enctype="multipart/form-data" 是文件上传的关键。
<form name="usrupload" method="POST" enctype="multipart/form-data">
  <label class="form-label text-start">Enter your Name
      <input class="form-control" name="name" type="text" placeholder="John" />
  </label>
  <label class="form-label">Title
      <input class="form-control" type="text" name="title" placeholder="Operator" />
  </label>
  <label class="form-label">Your Cute Photo (format: jpg and png only, less than 500kb)
      <input class="form-control"  name="file" type="file" />
  </label>
  <input type='button' name='bttn' value='Submit' />
</form>注意事项:
使用 JavaScript (jQuery) 创建 FormData 对象,并将表单数据添加到其中。然后,使用 Ajax 发送 FormData 对象。
const form = document.forms.usrupload;
form.bttn.onclick = () => {
  var form_data = new FormData(form);
  $.ajax({
    type: 'POST',
    dataType: 'text',
    cache: false,
    contentType: false,
    processData: false,
    url: 'save_data.php',
    data: form_data,
    success: function(data) {
      alert(data)
      window.location = 'account.php';
    }
  });
}关键点:
在 PHP 后端,可以使用 $_POST 和 $_FILES 超全局变量来访问上传的数据。
<?php $name = $_POST['name']; $title = $_POST['title']; $file = $_FILES['file']; // 其他处理文件和数据的代码 ?>
注意事项:
HTML:
<form name="usrupload" method="POST" enctype="multipart/form-data">
  <label class="form-label text-start">Enter your Name
      <input class="form-control" name="name" type="text" placeholder="John" />
  </label>
  <label class="form-label">Title
      <input class="form-control" type="text" name="title" placeholder="Operator" />
  </label>
  <label class="form-label">Your Cute Photo (format: jpg and png only, less than 500kb)
      <input class="form-control"  name="file" type="file" />
  </label>
  <input type='button' name='bttn' value='Submit' />
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
const form = document.forms.usrupload;
form.bttn.onclick = () => {
  var form_data = new FormData(form);
  $.ajax({
    type: 'POST',
    dataType: 'text',
    cache: false,
    contentType: false,
    processData: false,
    url: 'save_data.php',
    data: form_data,
    success: function(data) {
      alert(data)
      window.location = 'account.php';
    }
  });
}
</script>PHP (save_data.php):
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST['name'];
    $title = $_POST['title'];
    if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) {
        $file = $_FILES['file'];
        $filename = $file['name'];
        $filetmpname = $file['tmp_name'];
        $filesize = $file['size'];
        $filetype = $file['type'];
        // 移动上传的文件到指定目录
        $upload_dir = "uploads/"; // 确保该目录存在且可写
        $filepath = $upload_dir . $filename;
        if (move_uploaded_file($filetmpname, $filepath)) {
            echo "File uploaded successfully!";
        } else {
            echo "Error uploading file.";
        }
    } else {
        echo "No file uploaded or error during upload.";
    }
    echo "Name: " . $name . "<br>";
    echo "Title: " . $title . "<br>";
} else {
    echo "Invalid request method.";
}
?>总结:
通过正确配置 HTML 表单的 enctype 属性,使用 JavaScript 创建 FormData 对象,并设置 Ajax 请求的 contentType 和 processData 属性为 false,可以成功地将文件和文本数据一起上传到服务器。在 PHP 后端,可以使用 $_POST 和 $_FILES 超全局变量来访问上传的数据。记住进行适当的验证和错误处理,以确保应用程序的安全性。
以上就是使用 Ajax 和 FormData 实现文件上传及文本数据提交的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号