Я не могу понять, что здесь происходит. Я пытаюсь сделать довольно простой пост ajax для автозаполнения в laravel.
У меня есть поле ввода и место для результатов:
<div class = "form-group">
<input type = "text" name = "tag_name" id = "tag_name" class = "form-control input-lg" placeholder = "Enter Country Name" />
<div id = "tagList">
</div>
</div>
и мой JS
$('#tag_name').keyup(function(){
var query = $(this).val();
if (query != '')
{
//var _token = $('input[name = "_token"]').val();
$.ajax({
url:"{{ route('campaigns.search') }}",
method:"POST",
data:{query:query, _token: '{{ csrf_token() }}'},
success:function(data){
$('#tagList').fadeIn();
$('#tagList').html(data);
}
});
}
});
$(document).on('click', 'li', function(){
$('#tag_name').val($(this).text());
$('#tagList').fadeOut();
});
});
Маршрут указывает на мою функцию контроллера:
public function searchTags(Request $request)
{
if ($request->get('query'))
{
$query = "%" . $request->get('query') . "%";
$data = CampaignTags::where('TAG_DATA', 'LIKE', $query)->get();
$output = '<ul>';
foreach ($data as $row) {
$output .= '<li><a href = "#">' .$row->TAG_DATA. '</a></li>';
}
}
return json_encode($data);
}
Когда я проверяю по мере ввода, я получаю 200 кодов при поиске, но я не получаю фактических результатов для отображения из базы данных, ответ кажется нулевым
Хм, я когда-либо использовал POST только для автозаполнения, и я всегда видел, как это делается. Я думал, что это должно быть сообщение, потому что я отправляю данные запроса в эту конечную точку.
О, извините, я пропустил вашу переменную $query. Можешь dd($search) посмотреть, не пусто ли. Также вы можете изменить $request->get('query') на $request->query. @MatthewDaly теоретически верно, но на практике не имеет значения
Первая проблема: у меня есть $search в кодировке json, но это должно быть $data. Это изменение, по крайней мере, заставило показать весь объект json
return repsonse()->json(['search' => $data]);Где вы берете поиск в этом примере?
@ТомН. Нет, вы по-прежнему можете передавать параметры с помощью GET, просто они будут переданы в URL-адресе. Если он извлекает данные для заполнения чего-либо, обычно это должен быть GET. Использование GET позволяет правильно кэшировать ответы там, где это необходимо, тогда как POST никогда не следует кэшировать.
@senty, который у меня не работает, но return json_encode($data) возвращает весь объект. Мне просто нужны tag_data объекта в моих позициях
Нравится ->pluck('tag_data')? Я не думаю, что совсем понимаю проблему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я сделал это с помощью typeahead. и ответил на него в другой теме. до
вот ссылка. Автозаполнение Laravel
Автозаполнение не должно использовать POST. По определению он ничего не меняет в состоянии, за исключением, возможно, целей ведения журнала или аналитики, а вместо этого извлекает данные. Поэтому запрос GET был бы более подходящим.