Загрузка файла jQuery с дополнительными данными

Я использую jQuery для загрузки AJAX с дополнительными данными. Код Stackoverflow Я следую за ним этот. Как я могу загружать файлы асинхронно? и код, который я использую, следующий:

var formData = new FormData($('form')[0]); $.ajax({ type: "POST", url: "ajax/register.php", dataType: "text", data: { name: $("#name").val(), city: $("#city").val(), image: formData }, success: function(text) { if(text == "data ok pic ok") { window.location = "reg3.php"; } else { errorMessage(text); } }, cache: false, contentType: false, processData: false }); }); 

Проблема в том, что если я удалю файлы, связанные с кодом, например,

 var formData = new FormData($('form')[0]); image: formData cache: false, contentType: false, processData: false 

то код работает, и я могу отправить другие данные, также как «имя» и «город». Когда я вернусь в код, связанный с файлом, он перестает работать, никаких ошибок в консоли и никаких действий со скрипта PHP на сервере (например, он не получил других соответствующих данных)

Есть идеи?

Заранее спасибо.

Related of "Загрузка файла jQuery с дополнительными данными"

Когда вы пишете форму для отправки файла, вы указываете метод POST и кодировку multipart/form-data . Каждый <input> в HTML-коде будет преобразован браузером в part тела запроса HTTP, поэтому вы можете одновременно отправить несколько файлов и строк. Вот документация для FormData (см. Самую нижнюю часть страницы). В основном вы должны использовать

 var data = new FormData($('form')[0]); data.append("name", $("#name").val()); data.append("city", $("#city").val()); // ... $.post({ "ajax/register.php", data: data, processData: false, // tell jQuery not to process the data contentType: false // tell jQuery not to set contentType }); 

Объект FormData предназначен для непосредственного присвоения ключа data . Вы добавляете дополнительные поля к объекту FormData : он не представляет двоичный контент. Вместо этого это структура данных пары имен и значений , где ключи всегда являются строками, а значения могут быть строковыми или двоичными.

попробуйте добавить: enctype: 'multipart / form-data'

например

  { type: "POST", url: "ajax/register.php", dataType: "text", enctype: 'multipart/form-data', data: { name: $("#name").val(), city: $("#city").val(), image: formData } }