【问题标题】:Twitter typeahead not matching correctly when using "remote", but working with "local" JSONTwitter typeahead 使用“远程”时不正确匹配,但使用“本地”JSON
【发布时间】:2014-01-06 23:02:04
【问题描述】:

我正在使用 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”),该字段未填写完毕,下拉列表继续显示全部 20 个结果,未进行任何处理。

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

让我感到困惑的是,如果我将整个列表 直接 复制/粘贴到 JS 中(从 Firebug 获取 原样),作为 local 属性的 @987654327 @(而不是 remote),一切正常。

这可能是什么原因造成的?这是一个 Laravel 响应问题吗?或者是remote url 的typeahead 处理器(我相信它在“transport.js”源文件中,使用jQuery $.ajax())?

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

【问题讨论】:

  • 嗯,想解释一下否决票吗?

标签: php jquery json laravel-4 twitter-typeahead


【解决方案1】:

来自预先输入的文档:

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

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

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

【讨论】:

  • 到目前为止我省略了它,因为我想要一个完整的列表,并且只在本地过滤,所以我认为没有必要。如果是那个轻微的错误,该死的我......
  • 那么,它解决了您的问题吗?
  • 抱歉,之前没时间测试。是的,它有效:我认为该参数不是必需的,但事实证明确实如此。感谢您指出我的这种愚蠢行为,我以为我仔细阅读了文档...
  • 我还不能奖励赏金,需要再等一段时间,我会尽快完成:)
  • 好的,很高兴它对你有帮助;)
猜你喜欢
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多