Laravel - 500 (внутренняя ошибка сервера) при вызове Ajax - PullRequest
1 голос
/ 08 октября 2019

Я пробовал этот урок (https://www.youtube.com/watch?time_continue=7&v=D4ny-CboZC0) относительно моего контекста, и я получаю эту ошибку:

POST http://127.0.0.1:8000/transactions/fetch 500 (InternalОшибка сервера)

enter image description here

create.blade.php

@extends('layouts.app')
@section('title', 'New Transaction')
@section('content')
<form action="/transactions" method="POST">
    <div class="row">
        <label>Item Name</label>
        <input type="text" name="item_name" id="item_name" class="form-control input-lg" placeholder="Item Name">
        <div id="itemList"></div>
        {{ csrf_field()}}
        <label>Quantity</label>
        <input type="text" name="quantity[]"  value="" placeholder="Quantity">
        {{ $errors->first('quantity')}}
    </div>
    <button type="submit" class="btn btn-primary">Complete Order</button>
    @csrf
</form>

<script type="text/javascript">
$(document).ready(function(){
    $('#item_name').keyup(function(){
        var query = $(this).val();
        if(query!=''){
            var _token = $('input[name="_token"]').val();
            console.log(_token);
            $.ajax({
                url: "{{route('autocomplete.fetch')}}",
                method: "POST",
                data: {query: query, _token:_token},
                success:function(data){
                    $('#itemList').fadeIn();
                    $('#itemList').html(data);
                }
            })
        }
    });
})
</script>
@endsection

функция извлечения в TransactionController.php

public function fetch(Request $request)
{
    if($request->get('query')) {
        $query= $request->get('query');
        $data = DB::table('items')
        ->where('item_name', 'LIKE', '%{$query}%')
        ->get();
    }

    $output = '<ul class="dropdown-menu" style="display:block; position:relative">';
    foreach ($data as $row) {
        $output.= '<li> <a href="#">' .$row->item_name.'</a></li>';
    }
    $output .= '</ul>';
    echo $output;
}

web.php

Route::resource('transactions', 'TransactionController');
Route::post('/transactions/fetch', 'TransactionController@fetch')->name('autocomplete.fetch');

Пожалуйста, помогите мне выяснить, где именно проблема. Я пробовал многометоды видел онлайн, но ни один не работал.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Не могли бы вы использовать ->where('item_name', 'LIKE', '%' . $query . '%') вместо ->where('item_name', 'LIKE', '%{$query}%').

if($request->get('query')){
      $query= $request->get('query');
      $data = DB::table('items')
              ->where('item_name', 'LIKE', '%' . $query . '%')
              ->get();
}

Это работает для меня.

0 голосов
/ 08 октября 2019

Вы очень близки, чтобы получить решение. Но я думаю, что ваша ошибка исходит отсюда: переменная $ data в вашем контроллере будет массивом, поэтому в вашем теле foreach вы получите ошибку здесь

$row->item_name

Итак, вместо этого:

$data = DB::table('items')
       ->where('item_name', 'LIKE', '%{$query}%')
       ->get();

Напишите это (предположим, что ваша модель называется «Item»):

$data = Item::where('item_name', 'LIKE', '%{$query}%')->get();

ИМХО это решит проблему. Но это вернет только значения с учетом регистра. Например, если вы введете «abc», он не вернет слова с «ABC». Так что для этого вы можете просто сделать 2 стороны в верхнем регистре и сравнить. Вот так:

$data = Item::whereRaw("UPPER(item_name) LIKE '%" . strtoupper($query) . "%'")->get();

Если вы хотите идти вперед и искать также специальные символы, то я думаю, что этот ответ будет не только ответом на ваш вопрос. Но на данный момент я рекомендую вам использовать последний ряд.

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