Отсутствующие параметры в Ajax Post запрос в Laravel - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь сделать пост-запрос Ajax и передать параметры, чтобы использовать их в запросе, но мои параметры всегда пусты. Вот мой код:

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

function searchPatient(){
    var params = {
        'name'      : $("#input-search-name").val(),
        'lastname'  : $("#input-search-lastname").val() 
    }
    console.log($('meta[name="csrf-token"]').attr('content'));
    $.ajax({
        data        :  params,
        url         : '{{ route("searchPatient") }}',
        contentType: "application/json",
        type        : 'post',
        beforeSend  : function(){
            console.log(params);
        },
        success     : function(data){
            //Inserto a la tabla principal el contenido
            $("#main-table-patients").html(data);
            //alert('exito');
        },
        error       : function(xhr, status, error) {
              var err = eval("(" + xhr.responseText + ")");
              console.error(err.Message);
        }
    });
}

А это мой web.php

Route::group(['middleware'=>'auth'], function(){
  Route::namespace('Patient')->group(function(){
    Route::resource('/patients','PatientController');
    Route::post('/patients/search/{name?}/{lastname?}','PatientController@search')->name('searchPatient');
  });
});

И это мой метод в моем контроллере

public function search($name = '', $lastname = '')
{
  $patients = '';
  $patients = Patient::where('name', 'like', '%'.$name.'%')
      ->Where('lastName','like','%'.$lastname.'%');

  return $name.' and '.$lastname;   
}

1 Ответ

0 голосов
/ 31 октября 2018

Это ожидаемое поведение. Вы отправляете в POST переменные, но ваш маршрут предназначен для извлечения переменных из URL. Решите, что вы хотите ... если вы хотите передать их в POST, тогда URL вашего ajax-вызова должен быть /patients/search и ваш маршрут должен быть только

Route::post('/patients/search','PatientController@search');

ваш контроллер в этот момент может иметь дело с объектом $ request

public function search(Illuminate\Http\Request $request) {
    dd($request->all());
}

если вы хотите передать их в URL (не очень хорошая идея, ИМХО) затем измените свой URL-адрес вызова Ajax на:

url: '/patients/search/' + params.name + "/" + params.lastname

При таком подходе могут возникнуть проблемы, если один из двух параметров содержит косую черту (/)

...