我试图在我的 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 文件时它会返回。
2 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
在app/Exceptions/Handler.php文件中你可以做这样的事情
public function render($request, Exception $e)
{
if ($request->wantsJson()) {
$response = ... // put your response data here
return response()->json($response);
}
...
}
吃鸡游戏
TA贡献1829条经验 获得超7个赞
正如 aynber 所建议的,仔细查看返回的 HTML 页面,我意识到这是一个错误页面,当有人试图在没有权限的情况下访问页面时,由于中间件,我抛出了这个错误页面。我的控制器当然首先检查这个中间件。我对自动完成功能做了一个例外,现在一切正常,但我觉得我没有以好的方式处理我的中间件......
添加回答
举报
0/150
提交
取消