Возвращенный результат Ajax, зацикливание возвращаемого объекта в списке данных - PullRequest
0 голосов
/ 29 августа 2018

В настоящее время я использую ввод в моем блейде и вызов ajax, чтобы передать значение поля ввода функции, которая запрашивает конечную точку. Это вызывает при каждом нажатии клавиши.

Когда я отлаживаю в chrome и проверяю вкладку сети, я вижу, что он успешно возвращает объект из вызова ajax. Проблема в том, что я зацикливаюсь на объекте в списке данных, прикрепленном к полю ввода, и он не заполняется результатами.

Предполагается, что это тип автозаполнения, при котором вызов ajax запрашивает и возвращает результаты, которые будут отображаться и фильтроваться в списке данных. То, как я зацикливаю объект в моем блейде, работает, когда я копирую объект в файл с жестко закодированным значением. Мне интересно, нужно ли мне что-то еще в моем Ajax, чтобы правильно передать его обратно.

Опять же, мой Ajax-вызов успешен и возвращает объект, но что мне нужно сделать, чтобы мой return response()->json($searchResults); вернулся к списку данных для моего ввода?

controller.php

public function autoComplete(Request $request)
{
    if($request->ajax()){
       $search_result = $request->search_result;

       $service = new service();

        $searchResults = $service->getSearch($search_result);

        return response()->json($searchResults);
    }
}

view.blade.php

 <input id ="productInput"  class="uk-search-field" type="search" placeholder="search products..." list="returnedProducts">
    <datalist id="returnedProducts">
        @if ($searchResults->hits)
            @foreach($searchResults->hits as $arr)
                @foreach($arr as $obj)
                <option value="{{$obj->_source->category}}">{{$obj->_source->category}}</option>
                @endforeach
            @endforeach
        @endif
    </datalist>

<script type="text/javascript">

//input event handler
$('#productInput').on('input', function(){
    if($(this).val() === ''){
       return;
    }else{

       const searchResult = $(this).val(); 

       $.ajax({ url: '/account/autocomplete', 
                data: {
                    search_result:searchResult
                },
                "_token": "{{ csrf_token() }}",
                type: "POST", 
                success: function(response){
                    console.log(response);
                }
            });
    }

});
</script>

Обновление:

+"took": 3
+"timed_out": false
+"_shards": {#1141 ▶}
+"hits": {#1309 ▼
  +"total": 231
  +"max_score": null
  +"hits": array:10 [▼
      0 => {#1191 ▼
      +"_index": "products"
      +"_type": "product"
      +"_id": "1634"
      +"_score": 5.7772136
      +"_source": {#1214 ▼
       +"category": "General 1234:0 - Dark Green 123:25"

1 Ответ

0 голосов
/ 29 августа 2018

После нашего чата замените ваш success обратный вызов на этот:

<script>
    success: function(response){
        let searchResult = response.hits.hits;
        for(let i = 0; i < searchResult.length; i++) {
            $("#returnedProducts").append("<option value=" + searchResult[i]._source.category + ">" + searchResult[i]._source.category + "</option>");
        }
    }

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