[英]Why am I getting HTML response from jquery ajax call
我试图在我的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文件中时它会这样做。
正如aynber建议的那样,仔细查看返回的HTML页面,我意识到这是一个错误页面,当我有人试图在没有权限的情况下访问页面时,感谢中间件。 我的控制器当然首先要检查这个中间件。 我为自动完成功能做了一个例外,现在一切正常,但是我觉得我没有好好处理我的中间件......
在app/Exceptions/Handler.php
文件中你可以做这样的事情
public function render($request, Exception $e)
{
if ($request->wantsJson()) {
$response = ... // put your response data here
return response()->json($response);
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.