PHP和AJAX FormData无法通信

时间:2016-05-05 12:38:47

标签: php ajax

这让我抓狂!我无法理解为什么ajax没有将文件发送到php,有没有人能够理解?这是代码:

----- HTML -----

 <input id="mmSelectedDoc" name="selectedFiles[]" type="file" multiple></input>

----- JS -----

    mmSingFile = (document.getElementById("mmSelectedDoc").files)[0];

    var mmFilesData = new FormData();

    mmFilesData.append("selectedFiles[]", mmSingFile, encodeURIComponent(mmSingFile.name));

    var x=new XMLHttpRequest();
    x.onreadystatechange = function(e){
        if (x.readyState==4 && x.status==200){
           console.log(x.responseText);
        }
    }
    log(mmFilesData.get("selectedFiles[]"));
    x.open("POST","uploader.php", true);
    x.setRequestHeader("Content-type", "multipart/form-data");
    x.send(mmFilesData);

----- PHP -----

var_dump($_GET);
var_dump($_POST);
var_dump($_FILES);
die();

当我在发送之前记录mmFilesData.get(...)时,我可以看到里面有一个文件,但是登录onreadystatechange = 4只有空数组。如果我将content-type更改为application / x-www-form-urlencoded,我会从var_dump后面得到一个如下结果:

  ["-----------------------------172450022319283172571100694258

Content-Disposition:_form-data;_name"]=>
  string(813) ""selectedFiles[]"; filename="10434360_995996657086820_5574771356675124169_n.jpg"

Content-Type: image/jpeg

��here's in ascii the file content��

发生了什么?谢谢大家!

1 个答案:

答案 0 :(得分:0)

发送formdata对象时,不要在xhr对象上设置内容类型 不要在追加函数中编码文件名。