使用xhr发布表单字段+文件,并重建服务器端

时间:2011-07-18 18:44:02

标签: php javascript xmlhttprequest

我正在尝试通过XHR请求将HTML表单的数据提交到php脚本。

我遇到了代码问题但是我怀疑这与后端方面有关,但是在javascript中可能会做一些不正确的事情,如下所示:

var fd = new FormData();
fd.append("title", $('#uploadVidTitle').val());
fd.append("proj", $('#uploadVidProject').val());
fd.append("desc", $('#uploadVidDesc').val());
fd.append("action", $('#uploadAction').val());
console.log(fd);
fd.append("uploadFile", document.getElementById('videoUpload').files[0]);
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", "actions.php", false);
xhr.send(fd);

目前在php代码中我通过$_POST["name"]方法获取表单内容,但无法使用$_FILES["name"]检索文件内容。任何指针都将非常感激。

2 个答案:

答案 0 :(得分:0)

您可能希望在发送请求之前尝试设置一些请求标头:

xhr.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded”);

xhr.setRequestHeader(“Content-type”,“multipart / form-data”);

在发送POST请求后检查$ _FILES超全局,以查看是否可以从中访问任何文件。

答案 1 :(得分:0)

我认为服务器端存在问题。这个

foreach ($_FILES as $id => $val)
      if (isset($_FILES[$id]['name']) && $_FILES[$id]['name'] != '')
      {
          //process files

使用$ _FILES [$ id] ['name']检索文件名对我有用。