Ajax в Laravel Функция поиска не работает - PullRequest
0 голосов
/ 29 сентября 2019

сейчас он не показывает никаких данных;

console: finished loading: GET "http://todolist.local/teachers/search?text=a".

Я пытаюсь показать результат в tbody, когда пользователь вводит что-то в поиске.

Код Ajax:

<script>
$(document).ready(function(){
        $('#searchname').on('keyup', function(){
                var text = $('#searchname').val();
                $.ajax({
                        type:"GET",
                        url: 'teachers/search',
                        data: {text: $('#searchname').val()},
                        success:function(data){
$('tbody').html(data);
}
                });
        });
});
</script>

web.php:

Route::get('/search', 'TeachersController@ajaxsearch');

Контроллер поиска:

public function ajaxsearch(){
$searchname = Input::get ( 'searchname' );
  if($searchname != ""){
  $teacher = Teacher::where ( 'efirst', 'LIKE', '%' . $searchname . '%' )->paginate(10);
  return response()->json($teacher);
}
}

просмотр:

<div class="input-group stylish-input-group">
                        <input type="text" id="searchname" name="searchname" class="form-control"  placeholder="Search..." >
                   <span class="input-group-addon">
                            <button type="submit" class="btn btn-primary">
                                <span class="glyphicon glyphicon-search">Search</span>
                            </button>
                        </span>
                    </div>

Ответы [ 5 ]

3 голосов
/ 29 сентября 2019

Это должно сработать .

HTML:

  <div id="datasearch"></div>

JS:

$(function(){
    $('#searchname').on('keyup', function(){
        $.get('/teachers/search/'+$(this).val(), function(response){
            $('#datasearch').html(response);
        });
    });
});

Контроллер:

public function ajaxsearch(string $value = null){
    return $value ? Teacher::whereRaw("UPPER(efirst) LIKE '%".strtoupper($value)."%'")->paginate(10) : [];
}

Маршрут:

Route::get('/teachers/search/{value?}', 'TeachersController@ajaxsearch');

ВЕРСИЯ ПОСЛЕ ЧАТА

HTML:

  <ul id="datasearch"></ul>

JS:

$(function(){
    var $datasearch=$('#datasearch');
    $('#searchname').on('keyup', function(){
        $.get('/teachers/search/'+$(this).val(), function(teachers){
            $datasearch.empty();
            for (var i=0; i<teachers.length; i++){
                $datasearch.append('<li>'+teachers[i].efirst+' <a href="/teachers/edit/'+teachers[i].id+'">edit</a></li>');
            }
        });
    });
});

Контроллер:

public function ajaxsearch(string $value = null){
    return $value ? Teacher::select('id','efirst')->whereRaw("UPPER(efirst) LIKE '".strtoupper($value)."%'")->offset(0)->limit(10)->get() : [];
}

Маршрут:

Route::get('/teachers/search/{value?}', 'TeachersController@ajaxsearch');
0 голосов
/ 29 сентября 2019

Прежде всего, просто зайдите на URL вручную и введите параметры.
http://todolist.local/teachers/search?text=a
Если вы получили какой-либо ответ.Это значит, что ваш PHP работает хорошо.

Если вы получили ошибку, вы используете метод GET.Пожалуйста, передайте аргумент переменной в Route

Route::get('/search/{searchName}', 'TeachersController@ajaxsearch');

и, пожалуйста, исправьте ваш контроллер

public function ajaxsearch($searchname){
   if($searchname != ""){
       $teacher = Teacher::where ( 'efirst', 'LIKE', '%' . $searchname.'%' )->paginate(10);
       return response()->json($teacher);
   }
}

Во-вторых, пожалуйста, $ .get метод в Jquery для метода GET AJAX

<script>
    $(document).ready(function(){
        $('#searchname').on('keyup', function(){
           var text = $('#searchname').val();
            $.get(urlHere, function(response){
                console.log(response);
            });
        });
     });
</script>

См. Вкладку консоли, если вы получили ответ

0 голосов
/ 29 сентября 2019

В вашем поисковом контроллере вы используете неверное имя ввода.Так должно быть

public function ajaxsearch(){
$searchname = Input::get ( 'text' );
  if($searchname != ""){
  $teacher = Teacher::where ( 'efirst', 'LIKE', '%' . $searchname . '%' )->paginate(10);
  return response()->json($teacher);
}
}
0 голосов
/ 29 сентября 2019

ПОПРОБУЙТЕ ЭТОТ КОД, ПРОЙДИТЕ ЖУРНАЛ И ПРАВИЛЬНЫЙ МАРШРУТ

  <script>
    $(document).ready(function(){
            $('#searchname').on('keyup', function(){
                    var text = $('#searchname').val();
                    $.ajax({
                            type:"GET",
                            headers: {
                              'X-CSRF-TOKEN': '{{ csrf_token() }}'
                            },
                            url: "{{ route('teachers/search') }}",
                            data: {text: $('#searchname').val()},
                            success:function(data){
    $('tbody').html(data);
    }
                    });
            });
    });
    </script>

и в вашей части контроллера

public function ajaxsearch(){
    $searchname = Input::get ( 'searchname' );
      if($searchname != ""){
      $teacher = Teacher::where ( 'efirst', 'LIKE', '%' . $searchname . '%' )->paginate(10);
     $teacher->appends(['searchname' => $searchname ]);
      return response()->json($teacher);
    }
    }
0 голосов
/ 29 сентября 2019

Знаете ли вы о функции ошибок в jquery ajax?

$(document).ready(function(){
        $('#searchname').on('keyup', function(){
                var text = $('#searchname').val();
                $.ajax({
                        type:"GET",
                        url: 'teachers/search',
                        data: {text: $('#searchname').val()},
                        success:function(data){$('tbody').html(data);},
                        error:function(jqXHR){alert(jqXHR.status);} 
                });
        });
});

Вы можете попробовать это, она покажет ошибку, если она есть, и текст должен быть в кавычках, поскольку это пара ключ-значение.

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