Отправьте форму с текстом и изображениями на Laravel Контроллер через Ajax - PullRequest
1 голос
/ 01 августа 2020

Использование Laravel 7 jQuery v3.4.1

Я пытаюсь отправить содержимое формы через Ajax на контроллер Laravel. Форма содержит текстовое поле и поле файла. Я хотел найти способ отправить оба типа полей в одном запросе.

Похоже, что контент отправляется, но Laravel не может его прочитать и возвращает ошибку.

My Ajax Код

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
}); 
    
var form = $('form')[0]; 
var formData = new FormData(form);

    
    
$.ajax({
            url: form.attr('action'),
            data: formData,
            cache: false,
            method:'POST',
            contentType: false,
            processData: false,
            success: function (data) {

             console.log(data);
                
            },
            error: function (error,jqXHR, textStatus, errorThrown) {
                
                
              console.log(data.error);          
                
            }
        });
    

Форма

<form id="newProduct" action="{{route('Product.store',app()->getLocale())}}" method="POST" enctype="multipart/form-data">
        @csrf
        <input name="title" maxlength="10" length="10" placeholder="Product Title" type="text" id="title" class="form-control>
        <input type="file" name="files" id="files" class="files">
</form> 

Функция Laravel

public function store(Request $request)
{
        dd($request->input->all());
}

Данные отправляются через ajax, но каким-то образом Laravel не может получить доступ ко всему. Я получаю следующее сообщение об ошибке от Laravel Вызов функции-члена all () на null с кодом возврата 500 Http.

Это отрывок из HTTP-запроса, отправленного на Larval через ajax

----------------------------- 23552347725043592001228805073 Content-Disposition: form-data ; name = "title" sdf

Что нужно изменить, чтобы Laravel мог читать данные? Заранее спасибо.

1 Ответ

1 голос
/ 01 августа 2020

Согласно комментариям, $request->input не является атрибутом класса Illuminate\Http\Request, поэтому вызов all() для него возвращает null, потому что он не существует.

Как вы обнаружили , весь ввод может быть получен с помощью вспомогательной функции all(), $request->all().

В качестве альтернативы, ввод можно получить индивидуально, применив ввод как функцию $request->input('field') или $request->get('field'). Где $request->input() также может получать вложенные записи $request->input('form.name'), чего не может get().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...