我在这里看了几个答案,他们都使用jQuery的.ajax()
方法。下面我有一个vanilla JS方法,它是一个精简版本,我正在使用它取得了一些成功。
function ajax(options){
var settings = {
method : 'POST',
url : 'endpoint.php',
data : null,
done : function(){},
fail : function(){},
complete : function(){}
};
if(options) for(option in options) settings[option] = options[option];
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(){
if (xhttp.readyState == 4){
if(xhttp.status == 200){
settings.done(xhttp.responseText);
} else {
settings.fail(xhttp.responseText);
};
settings.complete(xhttp.responseText);
};
};
xhttp.open(settings.method, settings.url, true);
xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhttp.send(settings.data);
};
接下来是将文件分配给新FormData()
对象的函数。
function beginUpload(index){
var file = files.files[index];
var pkg = new FormData();
pkg.append('file', file);
pkg.append('size', file.size);
ajax({
data : pkg,
done : function(res){
console.log(res);
}
});
};
现在,问题出现了:我发现的所有教程和示例都说明在请求完成后,文件将在$_FILES
全局变量中找到。我得到一个200响应var_dump()
而$_FILES
对我来说是空的,但$_POST
不是。 $_POST
看起来像文件里面的内容。检查了所有php.ini设置from this question。
答案 0 :(得分:1)
xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
不要这样做。 XHR将识别FormData对象并将其设置为正确的值(不是这样)。