我想通過XMLHttpRequest上傳文件。我到處尋找例子,並發現不少。但我無法弄清楚我做錯了什麼。這是我的代碼。按下按鈕時觸發該功能。它沒有包裹在標籤中XMLHttpRequest不發送文件
function upl_kost() {
var url = "proces_data.php?ref=upload_kost";
var hr;
var file = document.getElementById("file_kost");
var formData = new FormData();
formData.append("upload", file.files[0]);
if (window.XMLHttpRequest) {
hr=new XMLHttpRequest();
} else {
hr=new ActiveXObject("Microsoft.XMLHTTP");
}
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "multipart/form-data");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
alert(return_data);
}
}
hr.send(formData);
}
並且該功能捕捉到它。
if($_GET['ref'] == 'upload_kost') {
var_dump($_FILES);
}
我的問題是$ _FILES保持空白。當我查看js中的file.files變量時,它將加載來自我想要上傳的文件中的數據。
謝謝!
文件(上傳)需要POST方法,而不是GET。所以,如果您的表單的方法設置爲GET,請將其更改爲POST。你也可以使用'$ _REQUEST'來代替'$ _GET',它可以用於POST和GET。嘗試'if($ _ REQUEST ['ref'] =='upload_kost')' – 2014-08-30 16:40:36
@ Fred-ii-'ref = upload_kost'在'url'中,即它是一個_GET_參數。 _XMLHttpRequest_作爲_POST_打開,然後'formData'作爲發佈數據發送。 – 2014-08-30 16:42:54
我認爲那不是問題。正如你所看到的hr.open(「POST」,url,true);它被設置爲發佈。 vardump被觸發,但它只是空的 – Jaap115 2014-08-30 16:43:12