如何解决jQuery / Ajax表单提交enctype =“ multipart / form- data”为什么'contentType:False'在PHP中导致未定义的索引?
contentType
option选项false
用于multipart/form-data
传递文件的表单。
当将contentType
选项设置为时false
,它将强制jQuery不添加Content-
Type标头,否则,边界字符串将丢失。另外,通过multipart / form-
data提交文件时,必须将processData
标志设置为false,否则jQuery将尝试将FormData转换为字符串,这将失败。
要尝试解决您的问题,请执行以下操作:
使用jQuery的.serialize()
方法以标准的URL编码表示法创建文本字符串。
使用时,您需要传递未编码的数据contentType: false
。
尝试使用new FormData
代替.serialize():
var formData = new FormData($(this)[0]);
亲自了解使用,将formData传递到php页面的区别console.log()
。
var formData = new FormData($(this)[0]);
console.log(formData);
var formDataSerialized = $(this).serialize();
console.log(formDataSerialized);
解决方法
我一直在尝试使用enctype =“ multipart / form-
data”提交表单。我有此设置,因为一旦我确定了用于文本输入的Ajax提交,表单将涉及jpeg / png上传。
-
当使用html形式的动作引用脚本时,php可以正常工作。
-
下方的jquery似乎正确检索了表单数据,因为警报行显示:productName = Test + Name&productDescription = Test + Description&OtherProductDetails =
-
通过jquery成功函数打印到我的HTML的返回数据是php错误,内容为:未定义索引:productName
-
删除contentType:false可解决此问题。
当我用谷歌jquery / ajax multipart / form-
data提交时,命中至少主要包括’contentType:false’。请有人可以向我解释原因吗?
http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax
http://hayageek.com/jquery-ajax-form-submit/
使用jQuery.ajax发送multipart /
formdata
jQuery API文档说:contentType(默认值:’application / x-www-form-urlencoded; charset =
UTF-8’)类型: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;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。