Я пытаюсь загрузить картинку с помощью 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]);
Спасибо за помощь
Казалось бы, тогда как 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
вы можете передать несколько параметров, как это
$.ajax({
type: "POST",
url: "edit.php",
data: { id: "ID HERE", adv_cover: "ADV COVER HERE" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});