Jquery/Ajax表单提交(enctype =“multipart/form-data”) 为什么“contentType:False”在PHP中引起未定义的索引?

前端之家收集整理的这篇文章主要介绍了Jquery/Ajax表单提交(enctype =“multipart/form-data”) 为什么“contentType:False”在PHP中引起未定义的索引?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在试图用enctype =“multipart / form-data”提交表单。我有这个设置,因为一旦我找出了文本输入的ajax提交,表单将涉及jpeg / png上传

>使用html格式的动作引用脚本时,PHP工作正常。
>表单数据似乎被下面的jquery正确地检索,因为警报行显示:productName = Test Name& productDescription = Test Description& OtherProductDetails =
>由jquery成功函数打印到我的HTML的返回数据是一个PHP错误,说:Undefined index:productName
> remove contentType:false修复问题。

当我google 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/
Sending multipart/formdata with jQuery.ajax

jquery API文档说:
contentType(默认值:’application / x-www-form-urlencoded; charset = UTF-8′)
类型:字符串
将数据发送到服务器时,请使用此内容类型。

为什么我们需要将其设置为虚假的多部分/表单数据提交?
什么时候需要虚假设定?

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用于传递文件的多部分/表单数据表单。

当将contentType选项设置为false时,会强制jQuery不要添加Content-Type头,否则边界字符串将会丢失。另外,当通过多部分/表单提交文件时,必须将processData标志设置为false,否则,jQuery将尝试将FormData转换为字符串,否则将失败。

尝试解决您的问题:

您正在使用jQuery的.serialize()方法,它以标准的URL编码符号创建一个文本字符串。

使用“contentType:false”时,需要传递未编码的数据。

尝试使用“new FormData”而不是.serialize():

var formData = new FormData($(this)[0]);

看看你的formData如何通过使用console.log()传递到PHP页面的区别。

var formData = new FormData($(this)[0]);
  console.log(formData);

  var formDataSerialized = $(this).serialize();
  console.log(formDataSerialized);

猜你在找的jQuery相关文章