Php XMLHttpRequest()格式错误的帖子头HTML5上载

Php XMLHttpRequest()格式错误的帖子头HTML5上载,php,ajax,perl,xmlhttprequest,Php,Ajax,Perl,Xmlhttprequest,我使用以下代码将文件从手机上传到web服务器。如果我删除ajax调用并使用表单,那么只有上传可以工作。如果我使用ajax,我用来处理上传失败的PHP或CGI脚本。CGI给了我一个格式错误的post头错误 <script type="text/javascript"> function uploadFile() { var fd = new FormData(); var count = document.getElementById('file

我使用以下代码将文件从手机上传到web服务器。如果我删除ajax调用并使用表单,那么只有上传可以工作。如果我使用ajax,我用来处理上传失败的PHP或CGI脚本。CGI给了我一个格式错误的post头错误

  <script type="text/javascript">
  function uploadFile() {

    var fd = new FormData();

          var count = document.getElementById('fileUpload').files.length;


          for (var index = 0; index < count; index ++)

          {

                 var file = document.getElementById('fileUpload').files[index];
                 alert(file.name);

          } 

    var xhr = new XMLHttpRequest();

    xhr.upload.addEventListener("progress", uploadProgress, false);

    xhr.addEventListener("load", uploadComplete, false);

    xhr.addEventListener("error", uploadFailed, false);

    xhr.addEventListener("abort", uploadCanceled, false);

    xhr.open("POST", "upload.pl");

    xhr.send(fd);

  }

  function uploadProgress(evt) {

    if (evt.lengthComputable) {

      var percentComplete = Math.round(evt.loaded * 100 / evt.total);

      document.getElementById('progress').innerHTML = percentComplete.toString() + '%';

    }

    else {

      document.getElementById('progress').innerHTML = 'unable to compute';

    }

  }

  function uploadComplete(evt) {


    alert(evt.target.responseText);

  }

  function uploadFailed(evt) {

    alert("There was an error attempting to upload the file.");

  }

  function uploadCanceled(evt) {

    alert("The upload has been canceled by the user or the browser dropped the connection.");

  }

</script>


    <form id="form1" enctype="multipart/form-data" method="post" action="upload.pl">
    <div>
      <label for="fileUpload">Take or Select Images</label><br />
      <input type="file" name="fileUpload" id="fileUpload" accept="image/*" capture="camera" /><br />
      <input type="text" name="email" value="" />
    </div>
    <div id="details"></div>
    <div>
      <input type="button" onclick="uploadFile();" value="Upload" />
    </div>
    <div id="progress"></div>
    </form>

函数uploadFile(){
var fd=新FormData();
var count=document.getElementById('fileUpload').files.length;
对于(var索引=0;索引<计数;索引++)
{
var file=document.getElementById('fileUpload').files[index];
警报(文件名);
} 
var xhr=new XMLHttpRequest();
addEventListener(“进度”,uploadProgress,false);
xhr.addEventListener(“加载”,上载完成,错误);
xhr.addEventListener(“错误”,上载失败,错误);
xhr.addEventListener(“中止”,上载已取消,错误);
xhr.open(“POST”、“upload.pl”);
xhr.send(fd);
}
函数上载进度(evt){
if(evt.长度可计算){
var percentComplete=数学整轮(evt.loaded*100/evt.total);
document.getElementById('progress').innerHTML=percentComplete.toString()+'%';
}
否则{
document.getElementById('progress').innerHTML='无法计算';
}
}
功能上传完成(evt){
警报(evt.target.responseText);
}
函数上载失败(evt){
警报(“尝试上载文件时出错。”);
}
功能上载已取消(evt){
警报(“用户已取消上载或浏览器已断开连接”);
}
拍摄或选择图像


您从未使用任何数据填充过
fd
!从我在报纸上看到的

应该是

var fd = new FormData(document.getElementById('form1'));

标准ajax无法进行文件上传。通常的解决方法是将表单字段关闭到一个隐藏的iframe中,然后在那里进行约定表单提交。除非我遗漏了什么,否则您实际上不会发送任何内容!
var fd = new FormData(document.getElementById('form1'));