本文檔旨在解決在使用 Ajax 和 FormData 進行文件上傳時,同時提交文本輸入數(shù)據(jù)遇到的常見問題,例如 PHP 端無法獲取 `$_POST` 和 `$_FILES` 數(shù)據(jù)。我們將詳細介紹如何正確配置 HTML 表單、JavaScript 代碼以及 PHP 后端,以實現(xiàn)完整的文件和文本數(shù)據(jù)上傳功能。
首先,確保你的 HTML 表單正確設(shè)置了 enctype 屬性,并且 name 屬性在表單中是唯一的。enctype="multipart/form-data" 是文件上傳的關(guān)鍵。
<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) 創(chuàng)建 FormData 對象,并將表單數(shù)據(jù)添加到其中。然后,使用 Ajax 發(fā)送 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'; } }); }
關(guān)鍵點:
在 PHP 后端,可以使用 $_POST 和 $_FILES 超全局變量來訪問上傳的數(shù)據(jù)。
<?php $name = $_POST['name']; $title = $_POST['title']; $file = $_FILES['file']; // 其他處理文件和數(shù)據(jù)的代碼 ?>
注意事項:
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."; } ?>
總結(jié):
通過正確配置 HTML 表單的 enctype 屬性,使用 JavaScript 創(chuàng)建 FormData 對象,并設(shè)置 Ajax 請求的 contentType 和 processData 屬性為 false,可以成功地將文件和文本數(shù)據(jù)一起上傳到服務(wù)器。在 PHP 后端,可以使用 $_POST 和 $_FILES 超全局變量來訪問上傳的數(shù)據(jù)。記住進行適當?shù)尿炞C和錯誤處理,以確保應(yīng)用程序的安全性。
以上就是使用 Ajax 和 FormData 實現(xiàn)文件上傳及文本數(shù)據(jù)提交的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號