微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-jQuery文件上传以及其他数据

我正在使用jQuery使用其他数据进行AJAX上传.我正在跟着这个How can I upload files asynchronously?的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脚本也没有采取任何措施(例如它没有收到其他相关数据)

有任何想法吗?

提前致谢.

解决方法:

编写发送文件的表单时,请指定POST方法和multipart / form-data编码.每个< input>浏览器将在HTML代码中转换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对象旨在直接分配给数据键.您将其他字段附加到FormData对象:它不表示二进制内容.相反,它是name-value pair data structure,其中的键始终是字符串,值可以是字符串或二进制对象.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐