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

Post form fields + file using xhr, and reconstruct server side

本文关键字:xhr 重建 服务器端 表单 字段 文件 Post      更新时间:2023-09-26

我试图通过一个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"]检索文件内容。

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

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

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

您可能需要在发送请求之前尝试设置一些请求头:

xhr。setRequestHeader("内容类型","应用程序/x-www-form-urlencoded");

xhr。setRequestHeader("内容类型","多部分/格式");

POST请求发送后,还要检查$_FILES超全局变量,看看是否有文件可以从它访问