javascript - jquery $.each 中断 FormData 附加

标签 javascript jquery

所以我正在尝试创建一个拖放文件 uploader ,并且我已经将文件上传到服务器了。我使用 jQuery 和 FormData 对象来制定请求,并使用 $.ajax 来发送请求。我现在遇到一个问题,如果我迭代 files 数组,则 php 端不会收到任何内容,但如果我将每个文件硬附加到 filesData FormData 对象,php 端将确认收到文件。我在这里做错了什么吗?

    $("#upload-panel").on("drop", function(event) {
      event.preventDefault();
      event.stopPropagation();
      //files is now simply an array of file objects
      var files = event.originalEvent.dataTransfer.files; 

      var filesData = new FormData();

      // this doesn't work
      $.each(files, function(key, value) {
        filesData.append(key, files[key]);
        console.log(key);
        console.log(files[key]);
      });

      // this does
      filesData.append(0, files[0]);
      filesData.append(1, files[1]);
      // repeat for as many files.

      $.ajax({
        type: "POST",
        url: "file-processor.php",
        data: filesData,
        processData: false,
        contentType: false,
        cache: false,
        success: function(data, text, xhr) {
          console.log(data);
          console.log(text);
          console.log(xhr);
        },
        error: function (xhr, textStatus, err) {
          $("#results").html += err;
        }
      });
    }

文件处理器.php:print_r($_FILES);

文件变量: files

最佳答案

您可以尝试常规的for循环方法,这同样简单方便。它会完全执行您的工作代码的操作。

  for (var i = 0, len = files.length; i < len; i++) 
    filesData.append(i, files[i]);

关于javascript - jquery $.each 中断 FormData 附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682968/

相关文章:

javascript - 动态添加HTML并调用modal

javascript - 无法使用 jquery 和 twig 隐藏元素

javascript - 当 URL 更改时, Backbone 单页应用程序会向用户发出警报

javascript - 滚动锁定时滚动的 CSS/JS 动画

javascript - 元刷新 seo 问题并在单击表单字段时暂停

javascript - 在 fancybox 上是/否形式

javascript - 使用动态加载的内容调用 window.print()?

javascript - 无法通过设置 video.currentTime = {value} 来设置 video.currentTime

javascript - 在图表图像中显示鼠标悬停事件的轴值

javascript - 停止 iframe youtube 视频