我是XMLHttpRequest的新手,我一直使用JavaScript的FormData()将其用作AJAX文件上传器。
我遇到的问题是它似乎上传得很好,虽然我认为它没有发送到正确的PHP文件或我的PHP错误,因为图片所在的文件夹中没有显示。
目前,我不知道如何查看返回的html数据
JavaScript的:
$("#form").submit(function(event) {
event.preventDefault();
event.stopPropagation();
var form = $(this);
var file = document.getElementById("file");
var data = new FormData();
var onerror = function(event) {
alert("An error occoured!");
}
var onprogressupdate = function(event) {
if(event.lengthComputable) {
var percent = event.loaded / event.total * 100;
$("#progress").html(percent+"%");
}
}
var onreadystatechange = function(event) {
if(request.status == 200 && request.readyState == 4) {
alert("Uploaded!");
$("#progress").hide();
$("#progress").html("");
}
else {
alert("Alternative state and/or status");
console.log("state: " + request.state);
console.log("readyState: " + request.readyState);
}
}
for(var i = 0; i < file.files.length; i++)
data.append('file[]', file.files[i]);
$("#progress").show();
$("#progress").html("Uploading files...");
var request = new XMLHttpRequest();
request.upload.addEventListener("error", onerror);
request.upload.addEventListener("progress", onprogressupdate);
request.upload.addEventListener("readystatechange", onreadystatechange);
request.open("post", "upload.php");
request.setRequestHeader("Content-type", "multipart/form-data");
request.send(data);
});
上传页面
<?php
if(isset($_FILES["file"])) {
$f = $_FILES["file"];
$dir = "data";
if(!file_exists($dir))
mkdir($dir);
foreach($f["name"] as $k => $name) {
$file = $dir."/".$name;
if($f["error"][$k] == 0 && move_uploaded_file($f["tmp_name"][$k], $file)) {
$uploaded[] = $file;
}
}
die(json_encode($uploaded));
}
?>
答案 0 :(得分:6)
不要设置内容类型,它会自动设置。
答案 1 :(得分:0)
使用您要发送的表单元素创建FormData
对象:
var data = new FormData(this);
而不是
var data = new FormData();
FormData
的语法是
new FormData(可选的HTMLFormElement表单)
没有参数,它是空的,请参阅the reference。