Я использую 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 на сервере (например, он не получил других соответствующих данных)
Есть идеи?
Заранее спасибо.
Когда вы пишете форму для отправки файла, вы указываете метод 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 } }