【问题标题】:Pass files to PHP through Ajax (no redirect) [duplicate]通过 Ajax 将文件传递给 PHP(无重定向)[重复]
【发布时间】:2014-07-07 18:47:08
【问题描述】:

我一直在尝试通过表单中的文件上传将图像从 ajax 传递到 PHP。

以下是我的ajax调用:

var dataString = 'city='+ city_push + '&venue=' + venue_push + '&title=' + title_push + '&subtitle=' + subtitle_push + '&date=' + date_push + '&time=' + time_push + '&price=' + price_push + '&description=' + description_push + '&tag1=' + tag1_push + '&tag2=' + tag2_push + '&email=' + email_push + '&newvenue=' + newvenue + '&password=' + password_push;
    $.ajax({
      type: "POST",
      url: "assets/new.php",
      data: dataString,
      success: function() {
        alert("success");
      }
    });
    return false;

我想将文件添加到我的 dataString 中,以便我可以在 PHP 文件中使用 $_FILES 处理它。有没有办法做到这一点并保持当前的结构?此 ajax 代码在表单提交成功时被调用。

感谢您的帮助!

【问题讨论】:

  • 所以据我所知,没有办法做到这一点吗? @sphanley 解决方案似乎不起作用(可能只适用于 FF)
  • Javascript 不允许直接访问运行它的机器的文件系统,所以不,不使用表单提交它就没有唯一的 Javascript 方式来做到这一点。

标签: javascript php jquery ajax file-upload


【解决方案1】:

您应该考虑使用对象而不是字符串。 JavaScript 有一个 FormData 对象,您可以将其 append 项目。附加所有数据,然后您可以像这样append您的图像文件...

var formData = new FormData();
// add your variable values here using the append method
// Ex: formData.append('key', value);
var imageFile = document.getElementById('yourfileuploadidhere').files[0];
formData.append('image', imageFile);

您希望在客户端进行一些类型检查以捕获无效格式,然后在后端也对其进行验证。 完成 formData 对象后,只需在 ajax 调用中使用 data: formData,

【讨论】:

  • 你如何在 PHP 中获得它?会是 $_FILES['image'] 吗?再次感谢!我是 ajax 的菜鸟,上周开始学习。
  • 是的。并且其他元数据将存在于$_POST 数组中。 $_POST['city']; $_POST['venue']; 等您将每个键>值添加到您的formData
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多