Как отправить multipart / form-данные на сервер, используя Ajax, PHP и jQuery? - PullRequest
1 голос
/ 17 октября 2019

У меня есть форма, в которой мне нужно отправить имя пользователя вместе с его профилем. Итак, я создал форму ниже, используя HTML & Bootstrap -

 <form action="" method="post" id="demoForm" enctype="multipart/form-data">
    <div class="form-group">
        <label for="">Upload file</label>
        <input type="file" name="file" id="file" class="form-control">
    </div>
    <div class="form-group">
        <label for="">Your Name</label>
        <input type="text" name="name" id="name" class="form-control">
    </div>
    <div class="form-group">
        <input type="submit" name="save" id="save" value="Save" class="form-control btn btn-success">
    </div>
 </form>
<div id="result"></div>

Теперь мне нужно отправить эти данные на мой сервер с помощью PHP. Итак, я написал следующий код Ajax с использованием jQuery -

$(document).ready(function(){
    $('#demoForm').submit(function(e){
        e.preventDefault();
        var formData = new FormData(this);
        $.ajax({
            url: "ajax.php",
            type: "POST",
            data: formData,
            contentType : false,
            processData: false,
            success: function(data){
                $('#result').html(data);
            }
        });
    });
});

Теперь я написал следующий код PHP в файле ajax.php -

if(isset($_POST['save'])){

    $name = $_POST['name'];
    $file = $_FILES['file']['name'];

    if(!empty($file) && !empty($name)){
        $fileName = $_FILES['file']['name'];
        $tmp = $_FILES['file']['tmp_name'];
        $upload = move_uploaded_file($tmp,'uploads/'.$fileName);
       if($upload){
            echo "<h2>".$name.", your file has been uploaded successfully!</h2>";
       }else{
           echo "<h2>Something went wrong!</h2>";
       }
    }else{echo "File cannot be empty.";}
}else{echo "There is a problem";}

Теперь проблема в том, что яне получить ответ из файла php. Другими словами, файл ajax.php не получает данные, отправленные через Ajax, из файла index.php. Может ли кто-нибудь помочь мне, указав, какие ошибки я сделал? Также поделитесь, если какое-либо решение есть с вами. Благодаря.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы отправляете форму из Ajax, поэтому переменная $_POST['save'] не будет установлена. И поэтому код внутри блока if не будет работать. Удалите эту строку if(isset($_POST['save'])){ из своего PHP-кода и перепишите ее так:

$name = $_POST['name'];
$file = $_FILES['file']['name'];

if(!empty($file) && !empty($name)){
    $fileName = $_FILES['file']['name'];
    $tmp = $_FILES['file']['tmp_name'];
    $upload = move_uploaded_file($tmp,'uploads/'.$fileName);
   if($upload){
        echo "<h2>".$name.", your file has been uploaded successfully!</h2>";
   }else{
       echo "<h2>Something went wrong!</h2>";
   }
}
0 голосов
/ 17 октября 2019

if(isset($_POST['save'])){ - это проблема.

Кнопка отправки будет успешным элементом управления, только если она используется для отправки формы.

Ваш JavaScript отменяет отправку формы исделать запрос с использованием объекта FormData.

Проверьте наличие какого-либо другого фрагмента данных, сделайте save скрытым вводом или полностью удалите проверку.


В вашем PHP есть три оператора if,Только у одного из них есть else для вывода ошибки. Добавление else с сообщениями к двум другим облегчит вам отладку кода.

...