Я пытаюсь использовать автозаполнение пользовательского интерфейса jQuery в моем проекте Laravel, чтобы показать некоторые предложения, когда пользователь печатает. Вот скрипт, который запускается, когда пользователь вводит:
$(".autocomplete").autocomplete({
source: function(request, response) {
$.ajax({
url: '/autocomplete',
dataType: "json",
data: {
term : request.term,
field : $(this.element).prop("id")
},
success: function(data) {
console.log(data);
response(data);
},
error: function(result, status, error) {
console.log(result);
console.log(status);
console.log(error);
}
});
},
min_length: 0, });
Вот мой маршрутв web.php
Route::get('/autocomplete', 'SitesController@autocomplete');
И, наконец, мой контроллер, который извлекает результаты из базы данных.
public function autocomplete(Request $request) {
$term = \Request::get('term');
$field = \Request::get('field');
$sites = Site::where($field, 'ILIKE', '%'.$term.'%')
->distinct()
->get([$field]);
$data = [];
foreach($sites as $key => $site) {
$data[] = $site->$field;
}
return \Response::json($data);
}
В настоящее время это не работает, но когда я напрямую добавляю вышеуказанный код в свой маршрутфайлы, это работает хорошо.
Route::get('/autocomplete', function()
{
$term = \Request::get('term');
$field = \Request::get('field');
$sites = Site::where($field, 'ILIKE', '%'.$term.'%')
->distinct()
->get([$field]);
$data = [];
foreach($sites as $key => $site) {
$data[] = $site->$field;
}
return \Response::json($data);
});
Мой скрипт возвращает HTML-ответ, и вот ошибка, которую я получаю из консоли:
SyntaxError: Unexpected token < in JSON at position 0
at parse (<anonymous>)
at ajaxConvert (VM258 app.js:18060)
at done (VM258 app.js:18530)
at XMLHttpRequest.<anonymous> (VM258 app.js:18832)
Я не могу понять, почемуМой сценарий возвращает не JSON, а HTML, тогда как это происходит, когда я помещаю свой сценарий в файл web.php.