Laravel 5.6: Почему AJAX POST to Controller не показывает загрузку данных в Controller? - PullRequest
0 голосов
/ 18 сентября 2018

Я работаю над этим часами и никуда не денусь. По сути, мой Ajax-вызов работает хорошо. Я вытягиваю данные формы из представления. Я вижу данные XHR, когда смотрю в Chrome Network. У меня статус 200 и "ОК". Однако, независимо от того, что я делаю, я не могу получить какие-либо данные для отображения в моем контроллере. Я проверил свой маршрут, закомментировав его и, конечно же, получил ошибку, так что это положительно. Также данные XHR показывают правильный URL-адрес. Но даже простой dd ($ request) внутри контроллера ничего не дает, даже пустой []. Я перепробовал каждый вариант и прогуглил это до смерти. Что я делаю не так - спасибо!

Сокращенный HTML

<form action="" method="POST"  id="formData">
        <fieldset>
        {{ Form::hidden('customer_id',$customer[0]->id,['id'=>'customer_id'])}}
        {{ Form::hidden('lastname1',$customer[0]->lastname1,['lastname1'=>'lastname1'])}}
        {{ Form::hidden('reference',$quotation[0]->reference,['id'=>'reference'])}}
        </fieldset>
    </form>

AJAX

 $("#editsubmit").on('click', function () {
        event.preventDefault();
        var formData =$("#formData").serialize();
        var id = $("#reference").val();

        $.ajax({
            headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            type: 'POST',
            contentType:'JSON',
            processData: false,
            url: '/save_edit/'+id,
            data: {
                "_method": 'POST',
                "result": formData,
            },

          
            error: function () {
                alert('there has been a system level error - please contact support')
            }
        });
    });
  

Маршрут

Route::post('/save_edit/{id}','QuotationController@save_quote_edited');

Контроллер

 public function save_quote_edited(Request $request){

    dd(json_decode($request->getContent(), true));
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Для вашего маршрута требуется параметр "id", но у вас нет этого параметра в методе вашего контроллера.

Route::post('/save_edit/{id}','QuotationController@save_quote_edited');

Попробуйте:

public function save_quote_edited(Request $request, $id){

    *** insert code here ***

}
0 голосов
/ 19 сентября 2018

Для обработки форм вы не должны вызывать $request->getContent(), вы должны вызывать $request->all(), чтобы получить все параметры, $request->get('foo') или $request->foo, чтобы получить один параметр, или $request->get(['foo','bar','baz'), чтобы получить несколько параметров.

А для получения бонусных баллов, если вы использовали Подтверждение формы запроса Laravel , вы могли бы позвонить $request->validated() и получить только параметры, которые прошли проверку проверки.

...