Ajax: отправьте formData вместе с пользовательской переменной

Я пытаюсь загрузить картинку с помощью ajax.

Это работает, если я делаю так:

    $("#adv_cover").change(function(e){

e.preventDefault();

var formData = new FormData($('#adv_form_cover')[0]);

$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});

Затем в PHP я получаю такие данные:

if($_FILES["adv_cover"]["name"]) {}

ХОРОШО.

Но теперь мне тоже нужно отправить идентификатор, поэтому я делаю это в соответствии с некоторыми случаями, которые я нашел здесь:

    $("#adv_cover").change(function(e){

e.preventDefault();

var formData = new FormData();
formData.append('id', '1300');
formData.append('adv_cover', $('#adv_form_cover')[0]);

$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});

Затем в PHP я пытаюсь получить такие данные:

$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}

Но сейчас я ничего не понимаю.

Я также попытался console.log как formData [‘id’] и formData [‘adv_cover’], но безуспешно, поэтому кажется, что проблема, по крайней мере, на стороне javascript.

Обратите внимание, что я также попробовал оба:

formData.append('adv_cover', $('#adv_form_cover')[0]);

а также

formData.append('adv_cover[]', $('#adv_form_cover')[0]);

Спасибо за помощь

1

Решение

Казалось бы, тогда как new FormData() вызов принимает элемент формы HTML, .append() метод не:

присоединять

значение
   Значение поля. Может быть Blob, File или строкой, если ни то, ни другое значение преобразуется в строку.

(взято из https://developer.mozilla.org/en-US/docs/Web/API/FormData)

Итак, чтобы отправить файл — при использовании метода добавления — вам нужно овладеть файл объект или капля для файла. У меня нет настройки, доступной для тестирования в данный момент, но вы можете получить доступ к объекту File, используя:

$('#adv_form_cover').get(0).files[0]

или без jQuery:

document.getElementById('adv_form_cover').files[0]

Так что, возможно, попробуйте в качестве значения добавляемого значения использовать следующие версии:

недействительным присоединять(DOMString название, файл значение, необязательный DOMString имя файла);

Обновить

Хм, странно … да, это то, что я имел в виду

formData.append('adv_cover', $('#adv_form_cover').get(0).files[0], 'filename');

Хотя для работы ему обязательно понадобится файл, выбранный во входных данных. Что значит console.log() скажи если войдешь myfile?

Еще одна вещь, которую вы можете попробовать — это объединение ваших двух подходов, в основном вы создаете свою форму, используя свой первый пример:

var formData = new FormData($('#adv_form_cover')[0]);

Но затем добавьте дополнительные данные, например, так:

formData.append('id', '1300');

Это может работать, и было взято из нижней части этой страницы здесь:

https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects

5

Другие решения

вы можете передать несколько параметров, как это

$.ajax({
type: "POST",
url: "edit.php",
data: { id: "ID HERE", adv_cover: "ADV COVER HERE" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
-1