使用"remote"时,Twitter 预选不匹配,但使用 JSON "local"



我正在使用推特输入在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  Alarcu00f3n ","tokens":["Jordi","Alarcu00f3n"],"userid":"308"},
{"value":"Aaron Nerea Alejandro ","tokens":["Aaron","Alejandro"],"userid":"49"},
{"value":"Alexia  Alemu00e1n ","tokens":["Alexia","Alemu00e1n"],"userid":"306"},
{"value":"Salma  Almaraz ","tokens":["Salma","Almaraz"],"userid":"54"},
{"value":"Alma  Almonte Nevu00e1rez","tokens":["Alma","Almonte"],"userid":"101"},
{"value":"Daniela  Almonte ","tokens":["Daniela","Almonte"],"userid":"184"}
,....other similar results....]

问题是,我只输入列表中名字的任何字母都会在输入字段中自动完成("西尔维娅·米里亚姆·阿贝塔·卡雷特罗"),但是当我完整输入任何其他名字(例如"丹妮拉·阿尔蒙特")时,该字段没有完成,下拉列表不断显示整个 20 个结果,没有任何类型的处理。

不过,我

必须说,如果我单击一个名称,它会被正确选择(我正在记录基准面的 userid 属性),但自动完成仍然不起作用。

让我感到困惑的是,如果我直接在 JS 中复制/粘贴整个列表(按原样取自 Firebug),作为local typeahead()的属性(而不是 remote),一切都可以正常工作。

可能是什么原因造成的?是拉拉维尔的响应问题吗?还是 typeahead 处理器(我相信它在"传输.js"源文件中,使用 jQuery $.ajax() )的 remote url?

似乎返回的 JSON 被视为单个条目,我不知道为什么,因为它对我来说看起来是正确的......

从预键入文档中:

$('input.twitter-search').typeahead({
    name: 'accounts',
    prefetch: 'https://twitter.com/network.json',
    remote: 'https://twitter.com/accounts?q=%QUERY'
  });

如您所见,远程参数必须包含带有查询参数的 URL。PHP 方面,您必须测试是否设置了参数"q",然后调整您的请求(通过示例使用 LIKE 语句)以正确过滤列表。

否则,您可以尝试删除此远程参数,也许它仅适用于预取属性。

最新更新