Возвращенный результат Ajax, зациклить возвращенный объект в списке данных

В настоящее время я использую ввод в моем клинке и вызов 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.info(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"

Давайте посмотрим на образец вашего вывода и элемент html, в котором вы собираетесь отобразить результат.

Chukwuemeka Inya 29.08.2018 01:48

Вскоре я могу разместить образец, но я собираюсь отобразить параметр списка данных.

Geoff_S 29.08.2018 01:53

Прохладный. Будучи на готове.

Chukwuemeka Inya 29.08.2018 02:13

Хорошо, сейчас опубликовано

Geoff_S 29.08.2018 02:20

Это больше похоже на вывод dd(). Мне нужен вывод console.info(response).

Chukwuemeka Inya 29.08.2018 02:26

Я ничего не понимаю, это то, что я получаю на вкладке сети в инструментах разработчика Chrome.

Geoff_S 29.08.2018 02:26

Есть ли выход для console.info(JSON.parse(response.hits.hits)) ...?

Chukwuemeka Inya 29.08.2018 02:36

Я получаю «неожиданный токен o в JSON на позиции 1»

Geoff_S 29.08.2018 02:43

Без json. Разбирая, он вернул элементы объекта, как я и ожидал

Geoff_S 29.08.2018 02:55

Позвольте нам продолжить обсуждение в чате.

Chukwuemeka Inya 29.08.2018 02:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
174
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После нашего чата замените обратный вызов 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>

Извините, по дороге домой, но я попробую это сделать, как только сяду за компьютер. Спасибо!

Geoff_S 29.08.2018 03:46

Итак, я наконец-то получил добавление для работы с помощью searchResult [i] ._ source.category. Еще раз спасибо!

Geoff_S 29.08.2018 12:55

Ой! Хороший. Мы это упустили. Разрешите отредактировать свой ответ. Ваше здоровье!

Chukwuemeka Inya 29.08.2018 13:04

Спасибо! Значит, это не похоже на фильтрацию результатов? Это означает, что если я наберу букву, которая возвращает 10 результатов, и другую букву, которая возвращает только 5, в списке данных должны отображаться только самые новые 5, которые соответствуют полному вводу.

Geoff_S 29.08.2018 13:36

Фильтрация ваших результатов - это скорее проблема эластичного поиска. Можете ли вы подтвердить, что по мере ввода ajax отправляет запрос в PHP ... верно?

Chukwuemeka Inya 29.08.2018 13:45

Да, это происходит при каждом нажатии клавиши. Таким образом, он возвращается правильно при событии, но список данных показывает все от каждого нажатия клавиши

Geoff_S 29.08.2018 13:48

Я чувствую, что почти у цели. Похоже, что сейчас отображаются только последние результаты, а не все возвращенные совпадения. Итак, консоль показала 5 результатов, но в списке данных появился только один.

Geoff_S 29.08.2018 14:04

Другие вопросы по теме