Отправьте запрос AJAX со значениями текстовых полей и изображением, используя Laravel - PullRequest
0 голосов
/ 02 апреля 2020

В настоящее время я работаю с сохранением данных, используя ajax и laravel. Но когда я попытался добавить поле изображения при сохранении, оно теперь не работает должным образом.

Сначала я могу передать переменные со значениями, используя ajax, в мой контроллер.

это мои переменные name, type, select_file, steps, step_no

Если я не заполнил одно из этих полей, появится сообщение об ошибке.

Я могу получить имя файла поля select_file и проверить его на своем контроллере. .

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

The select_file must be an image

enter image description here

Ошибка выдает сообщение, даже если у него есть файл png.

Вот мой HTML

    <div class="modal fade" id="modalRecipes" tabindex="-1" role="dialog">

 <div class="modal-dialog" role="document">
    <div class="modal-content">
  <!--Header-->
  <div class="modal-header">
    <h4 class="modal-title" id="myModalLabel">Recipes</h4>
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
       <span aria-hidden="true">×</span>
       </button>
      </div>
     <!--Body-->
       <div class="modal-body">
    <div class="container">
        <form>
        {{ csrf_field() }}

            <div class="form-group row">
                <label for="name" class="col-md-4 col-form-label text-md-right">Name</label>

                <div class="col-md-6">
                    <input type="text" class="form-control name" name="name" id="name">
                </div>
            </div>

            <div class="form-group row">
                <label for="type" class="col-md-4 col-form-label text-md-right">Type</label>

                <div class="col-md-6">
                     <select class="form-control type" name="type" id="type">

                     </select>
                </div>
            </div>

            <div class="form-group row">
                <label for="select_file" class="col-md-4 col-form-label text-md-right">Select Image</label>

                <div class="col-md-6">
                     <input type="file" name="select_file" id="select_file" />
                </div>
            </div>



            <div class="optionBox">
              <div class="block step">
                <div class="form-group">
                  <label for="step1">Step 1</label>
                  <textarea name="steps" data-steps="1" class="form-control rounded-0 steps" id="step1" rows="10"></textarea>
                </div>
              </div>

            </div>
            <div class="">
                <span class="add">Add Option</span>
              </div>

        </form>
    </div>


  </div>
  <!--Footer-->
  <div class="modal-footer">
    <button type="button" class="btn btn-outline-success" data-dismiss="modal">Close</button>
    <button type="button" name="submit" class="btn btn-success waves-effect" id="btnSubmit">Submit</button>
        </form>
  </div>
</div>

и вот мой AJAX

 $(document).ready(function () {
    $("#btnSubmit").click(function () {
        var name = $("#name").val();
        var type = $("#type").val();
        var select_file = $("#select_file").val();

        var steps = [],
            step_no = [];
        $('textarea[name="steps"]').each(function() {
            steps.push($(this).val());
            step_no.push($(this).attr('data-steps'));
        });


        var x = document.getElementById("btnSubmit");
        x.innerHTML = "Loading...";
         document.getElementById("btnSubmit").disabled = true;

         $.ajax({
            headers:{'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            url: "{{ route('insert') }}",
            method: "POST",
            data:{
                name:name,
                type:type,
                steps:steps,
                step_no:step_no,
                select_file:select_file
            },
            dataType: "json",
            success:function(data)
            {
                if (data.success.length > 0) {
                    location.reload();
                } else {
                    toastr.error(data.error[0]);
                    var x = document.getElementById("btnSubmit");
                    x.innerHTML = "Submit";
                     document.getElementById("btnSubmit").disabled = false;
                }
            },
            error: function(xhr, ajaxOptions, thrownError){
                console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });

    });
});

А вот и мой контроллер

public function insert(Request $request)
{
    $message = "";
    $output = array();
    $error = array();
    $success = array();

    $validator = Validator::make($request->all(), [
      'select_file'=>'image',
      'name' => 'required',
      'type' => 'required',
      'steps' => 'required',
      'step_no' => 'required'
    ]);

    if ($validator->fails()) {
        $messages = $validator->errors()->all();
        $error[] = $messages; 
    } else {
        $dateTime = date('Ymd_His');
        $image = $request->select_file;
        $new_name = $dateTime . '.' . $image->getClientOriginalExtension();
        $image->move(public_path('img'), $new_name);


       // Code for saving data.....

        $messages = "Successfully Saved!";
        $success[] = $messages; 

    }

    $output = array(
        'error'=>$error,
        'success'=>$success
    );

    echo json_encode($output);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...