Я пытаюсь отправить форму с enctype = "multipart / form-data". У меня есть этот параметр, потому что форма будет включать jpeg / png uploads, как только я выясню представление ajax для ввода текста.
php отлично работает при ссылке на скрипт, используя действие в форме html.
данные формы, по-видимому, правильно извлекаются с помощью приведенного ниже jquery, поскольку строка предупреждения показывает: productName = Test + Name & productDescription = Test + Описание & OtherProductDetails =
возвращенные данные, напечатанные в моем HTML функцией jquery success, являются ошибкой php: Undefined index: 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/ Отправка multipart / formdata с помощью jQuery.ajax
В документации API jquery говорится: contentType (по умолчанию: «application / x-www-form-urlencoded; charset = UTF-8») Тип: String При отправке данных на сервер используйте этот тип контента.
Зачем нам нужно установить для него значение false для представления данных multipart / form? Когда вообще будет нужна ложная настройка?
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 не добавлять заголовок Content-Type, в противном случае граница границы будет отсутствовать. Кроме того, при отправке файлов через multi-part / form необходимо оставить флаг processData установленным в false, иначе jQuery попытается преобразовать вашу FormData в строку, которая не удастся.
Чтобы устранить проблему, выполните следующие действия:
Вы используете метод .serialize () jQuery, который создает текстовую строку в стандартной кодировке с кодировкой URL.
Вы должны передавать некодированные данные при использовании «contentType: false».
Попробуйте использовать «new FormData» вместо .serialize ():
var formData = new FormData($(this)[0]);
Соблюдайте разницу в том, как ваша форма данных передается на вашу php-страницу с помощью console.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; }); });