4

我正在使用 jQuery 使用附加数据进行 AJAX 上传。Stackoverflow 代码我正在关注这个如何异步上传文件?我使用的代码如下:

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 脚本没有任何操作(就像它没有收到其他相关数据一样)

有任何想法吗?

提前致谢。

4

2 回答 2

5

编写表单以发送文件时,您指定 POST 方法和multipart/form-data编码。HTML 代码中的每一个<input>都会被浏览器转换成partHTTP 请求正文中的一个,这样就可以同时发送多个文件和字符串。这是 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键。您将附加字段附加到FormData对象:它不代表二进制内容。相反,它是一个名称-值对数据结构,其中键始终是字符串,而值可以是字符串或二进制对象。

于 2012-09-30T13:35:41.397 回答
0

尝试添加:enctype:'multipart/form-data'

例如

            {
                type: "POST",
                url: "ajax/register.php",
                dataType: "text",
                enctype: 'multipart/form-data',
                data: {
                    name: $("#name").val(),
                    city: $("#city").val(),
                    image: formData
                }
            }
于 2012-09-30T13:31:59.837 回答