【发布时间】:2014-08-30 16:32:53
【问题描述】:
我想通过 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') -
@Fred-ii-
ref=upload_kost在url中,即它是一个 GET 参数。 XMLHttpRequest 作为 POST 打开,然后formData作为 post 数据发送。 -
我认为这不是问题所在。正如你所看到的 hr.open("POST", url, true);它设置为发布。 vardump 被触发,但它只是空的
-
那么,
upl_kost()是怎么被调用的,还是根本没有被调用? -
@Fred-ii-
标签: javascript php xmlhttprequest