AJAX没有发布FormData

时间:2014-03-03 20:48:01

标签: javascript php html ajax multipartform-data

我正在尝试使用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>&nbsp;</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']之前未定义的索引错误..它应该在那里,但不是.. < / p>

修改 It's being sent..

1 个答案:

答案 0 :(得分:1)

使用client.setRequestHeader("Content-Type", "multipart/form-data");设置Content-Type不应与上传文件/表单数据一起使用。浏览器使用我们不需要担心的请求内部的边界和内容来处理Content-Type值的生成。不手动设置该请求标头应允许浏览器在请求中正确包含该文件,并使其正确地供服务器使用。

更改后,您应该能够访问$_FILES["upload"],这是一个关联的属性数组。如果您需要获取实际内容,请使用file_get_contents($_FILES["upload"]["tmp_name"])之类的内容,否则您可以获取有关该文件的信息,如名称,类型等。


<强>参考文献: