Входное значение равно нулю вместо введенного значения - PullRequest
0 голосов
/ 09 января 2020

Я хотел бы использовать автозаполнение JqueryUI, но когда я пытаюсь отправить значение из входных данных поиска, вместо введенного значения у меня появляется пустое значение. В моем блейд-файле у меня есть форма:

<form method="post" action="{{ route('meals.store') }}" class="container-form">
    @csrf
    <label for="date">Nazwa produktu:</label>
    <input name="product-name" type="text" id="product-name" required/>
</form>

В блейд-файле я добавил скрипт:

$(document).ready(function() {
    $( "#product-name" ).autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "add/search",
                data: {
                    term: request.term
                },
                dataType: "json",
                success: function (data) {
                    var resp = $.map(JSON.parse(data), function (obj) {
                        return {
                            label: obj.name,
                            value: obj.id
                        }
                    });
                    response(resp);
                }
            });
        },
        minLength: 2
    });
});

Этот скрипт отправляет термин в URL 'add / search', и этот маршрут связан с функцией поиска:

public function search(Request $request)
    {
        $name = $request->get('product-name');
        Debugbar::info($name);
        $result = DB::table('products')->select(array('id', 'name'))->where('name', 'LIKE', '%' . $name . '%')->limit(25)->get();
        return response()->json($result->toJson());
    }

Но я получил все результаты, потому что переменная $ name равна нулю, даже когда я ввел значение.

Когда я пытаюсь использовать $ request-> all () ; Я получил массив с ключом и значением "term" => "ban", и я не знаю, как это возможно, когда входное имя другое.

1 Ответ

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

Это потому, что вы делаете post request и пытаетесь получить route parameter. измените это

$name = $request->get('product-name'); 

на

$request->'product_name' 

или

$request->only('product_name')

, а также измените название продукта на procductName или product_name не использовать - используйте _ или camel case

То, что вы пытаетесь сделать, нужно сделать, как показано ниже

http://localhost/meals/store?product-name="abc";

, если вам нравится, ваш код будет работать

 $name = $request->get('product-name');
 return $name; // will return abc

Также добавьте подтверждение к вашему запросу, как показано ниже

Контроллер:

public function search(Request $request)
{
        $this->validate($request, ['product_name' => 'required'])
        $name = $request->get('product-name');
        Debugbar::info($name);
        $result = DB::table('products')->select(array('id', 'name'))->where('name', 'LIKE', '%' . $name . '%')->limit(25)->get();
        return response()->json($result->toJson());
}

Файл Blade:

<form method="post" action="{{ route('meals.store') }}" class="container-form">
    @csrf
    <label for="date">Nazwa produktu:</label>
    <input name="product-name" type="text" id="product-name" required/>
    @error('email')
        <span class="invalid-feedback" role="alert">
               <strong>{{ $message }}</strong>
         </span>
    @enderror

</form>

Еще одна вещь, если вы видите, что ваш jquery script вы проходите term as body data с value из product-name измените это:

data: {
         term: request.term
 },

на:

data: {
             product_name: request.term
     },

или вы можете изменить $request->product_name в контроллере на $request->term

Надеюсь, это поможет.

Спасибо

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