JavaScript — Использование Ajax для загрузки файла

Я попробовал несколько вариантов этого (на основе статей и других SO-форумов), чтобы заставить это работать, и я сузил его до того факта, что данные теряются, когда я пытаюсь отправить данные формы в мой PHP-скрипт. Когда я повторяю $ _FILES [«file»] [«name»], он пуст.

Я проверил, и мои скрипты ajax и php связаны, так как я могу вернуть некоторые данные, но не данные формы. Это, очевидно, приводит к тому, что файлы не загружаются.

Мой текущий код ссылается на этот форум (ответ lee8oi):
JQuery Ajax Загрузка файла
Я начал новый форум, потому что этот вопрос был задан 6 лет назад.

HTML:

<form id="signUpForm" name="signUpForm"  action="../functions/newUser.php" method="post">
<input type="file" class="su_photo" name="file" id="user-photo">
<input type="submit" id="sign-up" type="button" class="btn btn-primary btn-sm pull-right" value="Get Started">
</form>

ЯШ:

  $('#signUpForm').on('submit',function(){
var fd = new FormData( $('#signUpForm') );
fd.append("label", "WEBUPLOAD");
$.ajax({
url: "../../functions/newUser.php",
type: "POST",
data: fd,
processData: false,  // tell jQuery not to process the data
contentType: false   // tell jQuery not to set contentType
}).done(function( data ) {
console.log("PHP Output:");
console.log( data );
});
return false;
});

PHP:

   if ($_POST["label"]) {
$label = $_POST["label"];
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
$filename = $label.$_FILES["file"]["name"];
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

if (file_exists("uploads/" . $filename)) {
echo $filename . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"],
"uploads/" . $filename);
echo "Stored in: " . "uploads/" . $filename;
}
}
} else {
echo $_FILES["file"]["name"];
}

0

Решение

Я думаю, вам просто нужно изменить следующую строку

var fd = new FormData( $('#signUpForm') );

в

var fd = new FormData( $('#signUpForm')[0] );

или же

var fd = new FormData(this);

Конструктор FormData ожидает собственный элемент формы, а не объект jQuery. Так document.getElementById('signUpForm'), $('#signUpForm')[0], а также this все будет работать.

это ответ дает дальнейшее объяснение.

3

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector