这是我的观点的一部分,由Laravel Forms生成:
<form method="POST" action="http://laravelapp/search" accept-charset="UTF-8">
<input name="_token" type="hidden" value="g3RA...">
<input type="text" placeholder="Search" id="terms">
</form>
<script>
$( function() {
var testdata = [ "ActionScript", "AppleScript", "JavaScript" ];
$( "#terms" ).autocomplete({
minLength: 1,
source: '{{ URL::route('index.search') }}'
//source: testdata
});
});
</script>
这是index.search
的路线:
Route::post('/search', 'IndexController@search')->name('index.search');
这是我的IndexController
:
public function search(Request $request)
{
return Response('Hello World');
}
为简单起见,我用静态响应Hello World
替换了实际的搜索算法。但是,如果我取消注释javascript代码中的//source: testdata
行,则自动完成功能正常。当我使用到IndexController的路由时,没有任何反应。
当我按回车(=提交表单)时,新页面加载了Hello World
,但没有动态搜索结果。
如您所见,我插入了CSRF令牌,search()
方法返回了有效的响应。但是,它不是由javascript触发的。因此,我的问题是:
非常感谢任何帮助!
答案 0 :(得分:1)
自动完成功能要求其源是一个数据数组。默认情况下,将此响应回客户端的方式是json格式。您应该尝试将端点更改为不仅返回一个数组,而是将该数组编码为json格式,因此自动完成将知道如何处理它。