如何为自动完成function获取正确的json-datatype?

当我尝试这个时,它按预期工作:在两个字符后显示匹配的条目。

          $( document ).ready( function() { var data = [ 'John', 'Jack', 'Joe', 'Lisa', 'Barbara' ]; $( "#name" ).autocomplete({ source: data, minLength: 2 }); });    
Name:

这表现不同:在两个字符后,它始终显示所有条目?
第二个例子有什么问题?

 #!/usr/local/bin/perl use warnings; use 5.014; use utf8; use Mojolicious::Lite; get '/eingabe' => sub { my $self = shift; $self->render( 'eingabe' ); }; get '/search_db' => sub { my $self = shift; $self->render( json => [ 'John', 'Jack', 'Joe', 'Lisa', 'Barbara' ] ); }; app->start; __DATA__ @@ eingabe.html.ep           $( document ).ready( function() { $( "#name" ).autocomplete({ source: '/search_db', minLength: 2 }); });    
Name:

在第一个示例中,您使用数组来设置自动完成的选项。 在第二个中,数组被searilizied到json中,但是自动完成要求json具有特定的键/值对(id,label和value)。

我认为你最好的办法是为自动完成的数据定义一个自定义回调,如本教程中的nettuts所示 。

您的自动填充代码看起来与此类似:

 $("#name").autocomplete({ source : function(req, add){ $.getJSON("/search_db" + req, function(data){ suggestions = []; len = data.length; for(var i = 0; i < len; i++){ suggestions.push(data[i]); }; add(suggestions); //passing an array to add will populate the suggest list });//end getjson callback } }) 

我认为你的例子没有错,它完美无缺。 但是请确保你正在从正确的路径加载你的JS并且你正在尝试正确的URL: http : //127.0.0.1 : 3000 / eingabe

我修改了您的示例以加载Google托管库,它只是起作用: https : //gist.github.com/106e8c4eb7483333aa08

(至少在Chrome和Firefox中)