Envio de formulário Jquery / Ajax (enctype = “multipart / form-data”). Por que 'contentType: False' causa índice indefinido no PHP?

Eu tenho tentado enviar um formulário com enctype = "multipart / form-data". Eu tenho essa configuração porque o formulário envolverá uploads jpeg / png depois que eu descobrir o envio do ajax para entradas de texto.

o php funciona bem ao referenciar o script usando a ação no formulário html.

os dados do formulário parecem ter sido recuperados corretamente pela jquery abaixo, porque a linha de alerta mostra: productName = Teste + Nome & productDescription = Teste + Descrição & OtherProductDetails =

os dados retornados impressos em meu HTML pela função jquery success são um erro php dizendo: Índice indefinido: productName

remover contentType: false corrige o problema.

Quando eu pesquiso o envio de várias partes do jquery / ajax / formulário de dados pelo google, os principais hits incluem pelo menos principalmente 'contentType: false'. Por favor, alguém poderia me explicar o motivo?

http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax http://hayageek.com/jquery-ajax-form-submit/ Enviando multipart / formdata com jQuery.ajax

A documentação da API do jquery diz: contentType (padrão: 'application / x-www-form-urlencoded; charset = UTF-8') Tipo: String Ao enviar dados para o servidor, use este tipo de conteúdo.

Por que precisamos configurá-lo como false para um envio de várias partes / dados de formulário? Quando a configuração falsa seria necessária?

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;
  });