FormData是HTML5中新增的一種數據類型,它可以利用JavaScript將表單數據封裝成一組鍵值對,方便提交給后臺服務器。而PHP中的$_POST和$_FILES可以讀取表單提交的鍵值對和文件數據。但是,對于一些特殊的表單數據類型,比如需要上傳大文件,需要支持表單的異步提交等等,使用FormData會更加方便。那么,如何在PHP中讀取這個表單數據呢?下面我們就來詳細介紹一下。
常規的表單提交方式
在常規的表單提交中,我們可以使用$_POST和$_FILES來讀取表單數據和文件數據。比如下面的表單:
``````
在PHP中,我們可以使用$_POST和$_FILES來讀取這個表單數據:
```
$username = $_POST['username'];
$password = $_POST['password'];
$avatar = $_FILES['avatar']['tmp_name'];
```
這里需要注意的是,對于文件類型的表單數據,需要使用$_FILES來讀取。而讀取文件數據時,需要使用$_FILES['avatar']['tmp_name'],因為上傳的文件首先會被臨時保存在服務器上,tmp_name就是這個臨時文件的文件名。
使用FormData提交表單數據
而如果我們使用FormData來提交表單數據,代碼如下:
```
var formData = new FormData();
formData.append('username', 'zhangsan');
formData.append('password', '123456');
formData.append('avatar', avatarFile); // avatarFile為文件類型的表單數據
$.ajax({
url: 'submit.php',
type: 'post',
data: formData,
contentType: false, // 重要,告訴jQuery不要設置Content-Type請求頭
processData: false // 重要,告訴jQuery不要處理發送的數據
}).done(function(res) {
console.log(res);
});
```
在PHP中,需要使用$_POST和$_FILES來讀取這個表單數據,但是此時$_FILES['avatar']['tmp_name']是空的,因為FormData已經將文件數據封裝成了二進制數據并發送到了后臺。那么,如何讀取這個二進制數據呢?
使用php://input讀取二進制數據
在PHP中,我們可以使用php://input來讀取請求體中的二進制數據。php://input是一個只讀流,可以訪問通過POST、PUT和其他HTTP請求方法發送的原始請求數據。因此,如果我們想要讀取以二進制形式發送的表單數據,就可以使用php://input來讀取。代碼如下:
```
$inputString = file_get_contents('php://input');
parse_str($inputString, $formData);
$username = $formData['username'];
$password = $formData['password'];
```
使用php://input讀取二進制數據可能比較麻煩,但是它具有靈活性和可擴展性,并且可以用來處理二進制數據的特殊情況。
總結
通過以上的介紹,我們了解了如何使用FormData提交表單數據,并在PHP中讀取這個表單數據。對于常規的表單數據類型,我們可以使用$_POST和$_FILES來讀取;而對于通過FormData提交的二進制數據,可以使用php://input來讀取。PHP中的文件上傳和表單數據處理一直是個比較復雜的問題,但是了解相關的知識點,可以更好的解決這個問題。
網站導航
- zblogPHP模板zbpkf
- zblog免費模板zblogfree
- zblog模板學習zblogxuexi
- zblogPHP仿站zbpfang