передача данных из представления laravel в контроллер через событие ajax onchange - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть выпадающий список в виде лезвия. Я хочу отправить значение выбранного элемента в контроллер немедленно на обмен. У меня есть 2 маршрута в сети. php:

Route::get('/plots', 'PlotController@index'); 
Route::get('/plots/{testId}', 'PlotController@getData'); 

Первый заполняет раскрывающийся список. Предполагается, что второе посылает значение выпадающего списка контроллеру, который извлекает данные из mysql и отправляет данные обратно в представление, которое выводит aws график. Я могу заставить выпадающий список заполняться, но я не могу понять, как отправить выбранное значение в контроллер. Я пытаюсь использовать ajax, чтобы сделать это так:

$(document).ready(function() {

  $('#sel_test').change(function() {
    var testId = $(this).val();
    console.log("testId=" + testId);

    $.ajax({
      url: 'plots/' + testId,
      type: 'get',
      dataType: 'json',
      success: function(response) {
        console.log("success");
      }
    });
  });
});

Вывод testId на консоль правильный, но он никогда не доберется до контроллера. Я вижу в консоли ошибку:

GET http://homestead.test/plots/1 500 (Внутренняя ошибка сервера)

Я довольно новичок в laravel и нахожу это крайне запутанным. Может кто-нибудь объяснить правильный способ сделать это?

РЕДАКТИРОВАТЬ: После тестирования и подтверждения правильности ответа Риана, я затем попытался реализовать реальный код, который, конечно, гораздо сложнее. Вместо того, чтобы контроллер возвращал ввод test_id:

return $request->test_id;

Он на самом деле возвращает более сложную структуру:

return view('plot')
    ->with('measurements',json_encode($result))
    ->with('events',json_encode($timeline))
    ->with('limits',json_encode($limits));

Когда я раскомментирую исходный код контроллера, включая приведенный выше раздел возврата, он кажется, влияет на способность контроллера вернуть что-либо вообще. Вот первые несколько строк метода getData PlotController:

public function getData(Request $request) {
    Log::debug("made it to PlotController.php@getData");
    Log::debug("test_id="+$request->testId);

А вот вывод журнала:

[2020-02-23 16:43:52] laravel .DEBUG: сделано в PlotController. php@getData

Вторая строка ничего не выводит. Вот что я вижу в консоли javascript после выбора элемента из выпадающего списка:

testId = 49 jquery .min. js: 2 GET http://homestead.test/get-data-by-id?test_id=49 500 (внутренняя ошибка сервера)

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Сделать сообщение из Get for проще

В Сети. php

Route::post('/list/plots', 'PlotController@getData')->name('getData'); 

В файле Blade Ajax Запрос:

$(document).ready(function() {

 $('#sel_test').change(function() {
    var testId = $(this).val();
    var url = '{{ route("getData")}}';
    var token = "{{ csrf_token()}}";

   $.ajax({
     method:"post",
     url: url,
     data:{testId:testId,_token:token}
     dataType: 'json',
     success: function(response) {
       console.log("success",response);
     }
   });
 });

}) ;

На контроллере:

public function getData(Request $request){
  $testId = $request->testId;
  // Write your logic here
}

Попробуйте это. Надеюсь, что у вас получится

0 голосов
/ 23 февраля 2020

Самый простой способ - получить данные в Laravel Request. По крайней мере, так я это делаю.

Так что ваш маршрут не должен содержать никаких параметров для этого.

Ваш маршрут будет выглядеть так:

Route::get('get-data-by-id', 'PlotController@getData')->name('get.data.by.id');

Ваш ajax должен выглядеть следующим образом:

$(document).on('change', '#sel_test',function(){
    var testId = $(this).val();
    $.ajax({
        type:'GET',
        url:"{{ route('get.data.by.id') }}",
        data:{'test_id':testId},
        success:function(data){
            console.log(data);
        }
    });
});

В функции getData() вашего контроллера просто используйте Laravel Request для извлечения данных.

public function getData(Request $request)
{
    // You can return the ID to see if the ajax is working
    return $request->test_id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...