我正在使用twitter typeahead在Laravel 4中创建自动完成功能,但我在匹配过程中遇到了问题。
JS 代码:
$('#autocomplete').typeahead({
limit: 20,
name: 'destinatari',
prefetch: '{{URL::to("alumni/posta/utenti")}}',
remote: '{{URL::to("alumni/posta/utenti")}}'
});
模型会像这样填充数组:
public static function jsonList($idLogged)
{
$users = DB::table('users_data')
->where('userid', '!=', $idLogged)
->select('nome', 'nome_2', 'cognome', 'cognome_2', 'userid')
->orderBy('cognome', 'asc')
->orderBy('nome','asc')
->get();
$i = 0;
$ordered = array();
foreach($users as $u) {
$ordered[$i]['value'] = $u->nome.' '.$u->nome_2.' '.$u->cognome.' '.$u->cognome_2;
$ordered[$i]['tokens'] = array($u->nome, $u->cognome);
$ordered[$i]['userid'] = $u->userid;
$i++;
}
return $ordered;
}
我的控制器只是:
return Response::json( Users::jsonList($this->userdata->id) );
返回的json (我在Firebug中看到它)看起来像:
[{"value":"Silvia Miriam Abeyta Carretero","tokens":["Silvia","Abeyta"],"userid":"246"},
{"value":"Malak Julia Abreu Garrido","tokens":["Malak","Abreu"],"userid":"198"},{"value":"Aina Aguado ","tokens":["Aina","Aguado"],"userid":"243"},
{"value":"Jordi Alarc\u00f3n ","tokens":["Jordi","Alarc\u00f3n"],"userid":"308"},
{"value":"Aaron Nerea Alejandro ","tokens":["Aaron","Alejandro"],"userid":"49"},
{"value":"Alexia Alem\u00e1n ","tokens":["Alexia","Alem\u00e1n"],"userid":"306"},
{"value":"Salma Almaraz ","tokens":["Salma","Almaraz"],"userid":"54"},
{"value":"Alma Almonte Nev\u00e1rez","tokens":["Alma","Almonte"],"userid":"101"},
{"value":"Daniela Almonte ","tokens":["Daniela","Almonte"],"userid":"184"}
,....other similar results....]
问题在于,我在输入字段中输入仅列出名字的第一个名字(“Silvia Miriam Abeyta Carretero”),但是当我输入时任何其他名称(例如“Daniela Almonte”)该字段未完成且下拉列表一直显示整个结果,未经任何处理。
我必须说,如果我点击一个名称就会正确选择(我正在记录 datum 的 userid 属性),但仍然是自动完成功能无效。
让我感到困惑的是,如果我将整个列表直接复制/粘贴到JS中(从Firebug中取得 ),那么local
属性为typeahead()
(而不是remote
),一切正常。
可能导致这种情况的原因是什么?这是一个Laravel响应问题吗?或者它是$.ajax()
网址的预先处理器(我相信它位于“transport.js”源文件中,使用jQuery remote
)?
似乎返回的JSON被视为单个条目,我不知道为什么因为它对我来说是正确的...
答案 0 :(得分:1)
来自先行文档:
$('input.twitter-search').typeahead({
name: 'accounts',
prefetch: 'https://twitter.com/network.json',
remote: 'https://twitter.com/accounts?q=%QUERY'
});
如您所见,远程参数必须包含带有查询参数的网址。 在PHP方面,您必须测试是否设置了参数“q”,然后调整您的请求(通过示例使用LIKE语句)来正确过滤列表。
否则,您可以尝试删除此远程参数,也许只能使用prefetch属性。