AJAX живой поиск, возвращающий ошибку HTTP 500 - PullRequest
0 голосов
/ 09 января 2020

Я получаю 500 Внутренняя ошибка сервера при использовании поиска в реальном времени.

Html код:

<div class="col-lg-6 ">
    <div class="header-search-block ">
         <input type="text" name="search" id="search"
                placeholder="@lang('index.Type here to search')">
         <button>@lang('index.Search')</button>
    </div>
    <div id="result">
         <span>results is here</span>
     </div>
 </div>

Ajax код:

<script>
    $(function () {
        $("#result").hide();
        $("input[name=search]").keyup(function () {
            var value = $(this).val();
            var data = "value=" + value;
            $.ajax({
                type: "GET",
                data: data,
                url: '{{URL::to('search')}}',
                success: function (response) {
                    $("#result").show().html(response);
                }
            });
        });
    });
</script>

Мой контроллер:

public function search(\Illuminate\Http\Request $request) {

    $currentLangKey = session()->get('language') ?? App::getLocale();
    $languageId = Language::whereNull('deleted_at')->where('name', $currentLangKey)->first()->id ?? 0;


    $search = mb_strtolower($request->get('search'));
    $bookSearch = DB::table('books')->select('id', 'name', 'category_id', 'collection_id', 'price',
        'cover', 'seller', 'publisher',
        DB::raw("(SELECT name FROM categories WHERE id = category_id) as category_name"),
        DB::raw("COALESCE((SELECT AVG(star) FROM comments WHERE book_id = books.id), 5) as star_average"),
        DB::raw("(SELECT name FROM collections WHERE id = collection_id) as collection_name"))
        ->where(DB::raw('lower(name)'), 'like', '%' . $search . '%')
        ->where('language_id', $languageId)
        ->paginate(16);

    return response()->json($bookSearch);

}

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вы можете попробовать пару вещей. Во-первых, измените тип сообщения в ajax, чтобы получить сообщение. Во-вторых, измените значение $ search на $ request-> value, которое вы отправляете, используя Ajax

<script>
  $(function () {
       $("#result").hide();
       $("input[name=search]").keyup(function () {
           var value = $(this).val();
           var data = {’value’ :value};
           $.ajax({
               type: "Post”,
               data: data,
               url: '{{URL::to('search')}}',
               success: function (response) {
                   $("#result").show().html(response);
                }
             });
         });
     });
  </script>
0 голосов
/ 10 января 2020

Строка поиска отправляется на ваш сервер через атрибут value

//...
$("input[name=search]").keyup(function () {
            var value = $(this).val();
            var data = "value=" + value;
//...

Fix

$search = mb_strtolower($request->get('value'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...