【发布时间】:2014-03-03 20:48:01
【问题描述】:
我正在尝试使用 AJAX 上传文件。这是我第一次使用 FormData。
在我的客户端脚本中,我只是遍历 $_FILES 并回显每个,只是为了确认它们正在被发送,而它们不是。我也检查了 $_POST 数组,但它也是空的。虽然正在调用服务器端脚本,但似乎没有从 JavaScript 接收任何数据。
这是我的代码,我做错了什么?
JS
var client = new XMLHttpRequest();
function upload(){
var file = document.getElementById("uploadfile");
var formData = new FormData();
formData.append("upload", file.files[0]);
client.open("post", "/orl_ajax_uploader.php", true);
client.setRequestHeader("Content-Type", "multipart/form-data");
client.send(formData);
return false;
}
client.onreadystatechange = function(){
if (client.readyState == 4 && client.status == 200){
alert(client.response);
}
}
HTML
<form action="orl_ftp.php" method="POST" enctype="multipart/form-data" onsubmit="return upload()">
<table>
<tr>
<td>Choose File: </td>
<td><input type="file" name="file" id="uploadfile" multiple /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Process"></td>
</tr>
</table>
</form>
PHP(仅用于测试)
$str = "POST PARAMS // ";
foreach($_POST as $k=>$v){
$str .= $k."=".$v." :: ";
}
$str .= "FILES PARAMS // ";
foreach($_FILES as $k=>$v){
$str .= $k."=".$v." :: ";
}
$str .= "GET PARAMS // ";
foreach($_GET as $k=>$v){
$str .= $k."=".$v." :: ";
}
$str .= '"'.$_FILES['upload'].'"';
echo $str;
当我点击提交时,PHP 每次都会发回这个字符串:POST PARAMS // FILES PARAMS // GET PARAMS // "" 以及试图调用 $_FILES['upload'] 的未定义索引错误......应该在那里,但不是......
编辑
【问题讨论】:
-
您是否检查过浏览器控制台是否有警告,或监控网络流量以确保正确创建/发送请求?您确定您使用的浏览器支持
FormData和/或XMLHttpRequest2? -
我不知道它会如何伤害它,但我发现的例子不像你那样使用
client.setRequestHeader("Content-Type", "multipart/form-data");。试着把它拿出来试试? -
@Ian 是的,是的,是的。请参阅我添加的屏幕截图。你觉得那里有什么问题吗?
-
这有帮助!我不知道为什么,但我现在得到的是“Array”而不是“”!哇!如果你把它放在答案中,我会选择它!谢谢!`
标签: javascript php html ajax multipartform-data