Ajax не публикуется в контроллере laravel - PullRequest
0 голосов
/ 24 мая 2018
<script type="text/javascript">
     $(document).ready(function(){
     $('#mainmenu').change(function(){
         var main_menu_id = $('#mainmenu').val();

         $.ajax({
             type: 'POST',
             url: '/sub',
             data: {"main_menu_id": main_menu_id,_token: '{{csrf_token()}}'
             success: function (data) {


var submenus = data.submenus;
      for(var i=0; i<submenus.length; i++){
      $('#submenu').append('<option>'+submenus[i]+'</option>');
    }   

          },
             error: function () {
                 alert('what ever');
             }
         }); 
     });
</script>

Мой маршрут

Route::post('/sub','TicketController@sub');

И мой контроллер

public function sub(Request $request)
{    
    dd($request->all());
    return Response([
        'submenus' => DB::connection("mysql2")->table('applicationsubmenu')
        ->join('applicationmenu', 'applicationmenu.Id', '=', 
        'applicationsubmenu.ApplicationMenuId')
        ->select('applicationsubmenu.*')
        ->where('applicationmenu.MainMenuId', '=', $request->main_menu_id)
        ->get()->toarray(), 
    ]);
}

Я пытаюсь заполнить подменю опций в зависимости от выбора меню опций пользователя. Для этого я попыталсясборка ajax, но, похоже, он вообще не работает. Кажется, что ни одна функция laravel вообще не вызывается!

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

Использовали ли вы промежуточное ПО ajax

Route::post('/sub','TicketController@sub')->middleware('ajax');;
0 голосов
/ 24 мая 2018

Попробуйте правильно настроить запросы ajax для проекта:

В заголовке

<meta name="csrf-token" content="{{ csrf_token() }}" />

В сценарии

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>
0 голосов
/ 25 мая 2018

Почему вы сбрасываете $request в свой контроллер?

 dd($request->all());

Документы Laravel: функция dd сбрасывает заданные переменные и завершает выполнение скрипта https://laravel.com/docs/5.6/helpers#method-dd

Также при получении значений из $ request ...вы делаете это:

->where('applicationmenu.MainMenuId', '=', $request->main_menu_id)

, но вы должны получить значения, подобные этому:

->where('applicationmenu.MainMenuId', '=', $request->input('main_menu_id')

или, если вы хотите получить массив запроса, вы должны сначала установить:

$input = $request->all(); 

, а затем вызвать значение следующим образом:

$input->main_menu_id
0 голосов
/ 24 мая 2018

вы забыли отправить токен

        $.ajax({
         type: 'POST',
         url: '/sub',
         data: {'_token':'{{csrf_token()}}',"main_menu_id": main_menu_id},
         success: function (data) {
             alert(data);
         },
         error: function () {
             alert('what ever');
         }
     }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...