我一直在尝试使用enctype=“multipart/form data”提交表单。我有这个设置,因为一旦我了解了文本输入的ajax提交,表单将涉及jpeg/png上传。
>
当使用表单html中的操作引用脚本时,php工作正常。
下面的jquery似乎可以正确检索表单数据,因为警告行显示:productName=Test Name
jquery success函数打印到my HTML的返回数据是一个php错误,显示为:Undefined index:productName
删除contentType:false修复了该问题。
当我在google jquery/ajax multipart/form data submission中搜索时,最热门的内容至少包括“contentType:false”。谁能给我解释一下原因吗?
http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajaxhttp://hayageek.com/jquery-ajax-form-submit/发送多部分/formdata与jQuery.ajax
jQuery API留档表示:contentType(默认:'Application/x-ww-form-urlencoded; charset=UTF-8')Type: String向服务器发送数据时,请使用此内容类型。
为什么我们需要为多部分/表单数据提交设置为false?什么时候需要错误的设置?
JQuery:
$("#addProductForm").submit(function (event) {
event.preventDefault();
//grab all form data
var formData = $(this).serialize();
$.ajax({
url: 'addProduct.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
$("#productFormOutput").html(returndata);
alert(formData);
},
error: function () {
alert("error in ajax form submission");
}
});
return false;
});
contentType
选项的false
用于传递文件的Multipart/form-data
表单。
当将contentType
选项设置为false
时,将强制jQuery不添加内容类型头,否则,它将丢失边界字符串。另外,当通过多部分/表单数据提交文件时,必须将processData
标志设置为false,否则jQuery将尝试将表单数据转换为字符串,这将失败。
使用jQuery的.序列化()
方法,该方法以标准的URL编码表示法创建文本字符串。
使用contentType:false
时,需要传递未编码的数据。
尝试使用newformdata
而不是。序列化():
var formData = new FormData($(this)[0]);
通过使用控制台,您自己可以看到formData如何传递到php页面的差异。log()
。
var formData = new FormData($(this)[0]);
console.log(formData);
var formDataSerialized = $(this).serialize();
console.log(formDataSerialized);
请设置您的表单动作属性如下它将解决您的问题。
<form name="addProductForm" id="addProductForm" action="javascript:;" enctype="multipart/form-data" method="post" accept-charset="utf-8">
jQuery代码:
$(document).ready(function () {
$("#addProductForm").submit(function (event) {
//disable the default form submission
event.preventDefault();
//grab all form data
var formData = $(this).serialize();
$.ajax({
url: 'addProduct.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function () {
alert('Form Submitted!');
},
error: function(){
alert("error in ajax form submission");
}
});
return false;
});
});