【发布时间】:2019-05-09 12:36:00
【问题描述】:
我正在尝试在我的 Laravel 项目中使用 jQuery UI 自动完成功能来在用户输入时显示一些建议。这是用户输入时触发的脚本:
$(".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 文件时它确实如此。
【问题讨论】:
-
检查您的开发者控制台中的网络选项卡,并查看请求的响应选项卡以准确了解它返回的内容。它可能会抛出错误而不是返回 json。
-
您很可能在控制器中抛出错误或尝试访问它。由于内联代码有效,我首先检查原始路由是否正确访问控制器类,我敢打赌它缺少命名空间或路径错误
标签: php jquery json ajax laravel