梵蒂岡之花
2021-12-02 19:25:34
我正在嘗試使用 php 和 XMLHttpRequest 獲得一個(gè)簡(jiǎn)單的上傳系統(tǒng)。但是我無法使用請(qǐng)求實(shí)現(xiàn)目標(biāo)。它不起作用..這是我用于獲取圖像文件的 HTML 表單:<form action="../session/uploader.php" method="post" enctype="multipart/form-data" id="uploadForm"> Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"></form>這是我的 PHP 腳本,它將圖像保存到我的文件系統(tǒng)中:<?phpif(isset($_POST["submit"])) { $target_dir = "../db/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);}?>現(xiàn)在這工作得很好,但我想使用 XMLHttpRequest 以便在上傳圖像時(shí)不需要刷新頁(yè)面。我試圖做一些看起來很簡(jiǎn)單的事情,但沒有奏效。首先,我將 PHP 更改為:<?php$target_dir = "../db/";$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);?>在 HTML 表單的正下方,我添加了一些 Javascript 來生成 XMLHttpRequest 并發(fā)送它:<script> const uploadForm = document.getElementById("uploadForm"); uploadForm.addEventListener("submit", function(e) { e.preventDefault(); const xhr = new XMLHttpRequest(); xhr.open("POST", "../session/uploader.php", true); xhr.setRequestHeader("Content-Type", "multipart/form-data"); xhr.send(new FormData(uploadForm)); });</script>這里的問題是它根本不起作用。沒發(fā)生什么事。我沒有得到任何反饋。就像沒有調(diào)用 uploader.php 腳本一樣。有誰知道可能是什么問題?
1 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
if(isset($_POST["submit"]))
提交按鈕不會(huì)包含在此處的表單提交數(shù)據(jù)集中,就像您剛剛“正?!卑l(fā)送表單一樣。
xhr.send(new FormData(uploadForm));
瀏覽器此時(shí)不知道您單擊了提交按鈕來實(shí)際觸發(fā)整個(gè)過程 - 因此它將只包含fileToUpload
文件上傳字段的數(shù)據(jù),而不包含提交按鈕。
您可以添加一個(gè)隱藏字段,然后檢查它是否在 $_POST 中設(shè)置,或者您檢查是否fileToUpload
直接設(shè)置(但請(qǐng)記住,該字段將在 $_FILES 中,而不是 $_POST 中。)
xhr.setRequestHeader("Content-Type", "multipart/form-data");
一個(gè)適當(dāng)?shù)亩嗖糠终?qǐng)求還需要在此標(biāo)頭中包含將用于分隔請(qǐng)求正文中的部分的邊界。
使用 FormData,這應(yīng)該會(huì)自動(dòng)添加,所以刪除這一行 - 它用此時(shí)不完整的標(biāo)題覆蓋正確的標(biāo)題。
添加回答
舉報(bào)
0/150
提交
取消