php - 带有附加数据的 jQuery 文件上传

标签 php jquery ajax upload

我正在使用 jQuery 对附加数据进行 AJAX 上传。 Stackoverflow 代码我正在关注这个 How can I upload files asynchronously?我使用的代码如下:

var formData = new FormData($('form')[0]);
                $.ajax({
                    type: "POST",
                    url: "ajax/register.php",
                    dataType: "text",
                    data: {
                        name: $("#name").val(),
                        city: $("#city").val(),
                        image: formData
                    },
                    success: function(text) {
                        if(text == "data ok pic ok") { window.location = "reg3.php"; }
                        else { errorMessage(text); }
                    },
                    cache: false,
                    contentType: false,
                    processData: false
                });
            });

问题是,如果我删除与文件相关的代码,例如

var formData = new FormData($('form')[0]);
image: formData
cache: false,
contentType: false,
processData: false

然后代码就可以工作了,我可以发送其他数据,比如“姓名”和“城市”。当我放回与文件相关的代码时,它停止工作,控制台中没有错误,服务器上的 PHP 脚本也没有任何 Action (就像它没有收到其他相关数据一样)

有什么想法吗?

提前致谢。

最佳答案

当编写发送文件的表单时,您指定 POST 方法和 multipart/form-data编码。每个<input>在 HTML 代码中将由浏览器转换为 part在 HTTP 请求正文中,因此您可以同时发送多个文件和字符串。 Here is the documentation for FormData (见页面底部)。基本上你应该使用

var data = new FormData($('form')[0]);
data.append("name",  $("#name").val());
data.append("city",  $("#city").val());

// ...

$.post({
  "ajax/register.php",
  data: data,
  processData: false,  // tell jQuery not to process the data
  contentType: false   // tell jQuery not to set contentType
});

FormData对象旨在直接分配给 data key 。您将附加字段附加到 FormData对象:它不代表二进制内容。相反,它是 name-value pair data structure ,其中键始终是字符串,值可以是字符串或二进制对象。

关于php - 带有附加数据的 jQuery 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661566/

相关文章:

php - 在各个单元格中显示数组值

php - Mysql重启后恢复Memory表数据

php - 查询字符串问题中的自定义 Oauth 服务器和符号

php - 使用我的 Web 应用程序设置 LDAP 身份验证系统

javascript - 使用 mailto : 截取嵌入对象并嵌入到电子邮件中

javascript - 使用ajax发送文件无法按预期工作

php - 需要使用包装器从 soundcloud API 调用简单请求

javascript - 固定 float 元素 jQuery Wordpress

javascript - jquery 函数不适用于异步加载的 dom 元素

php - 计算在线访问者的数量?