使用jquery自动完成正确使用

时间:2016-08-24 19:40:04

标签: json scala playframework autocomplete

有人可以帮我一起使用它们吗?尝试了相同主题的代码,但我不清楚或只是过时了。 首先,自动完成代码:

<script>
  $( function() {
    $( "#tags" ).autocomplete({
      source: //What should be here?
    });
  });
</script>

然后,控制器代码:

def auto(term:String) = Action {
  Ok (Json.toJson(equipmentDAO.get(term))) }
}

方法 equipmentDAO.get(term))搜索 name == term 的对象并返回它们的Seq。

路线:

GET     /auto/:term                         controllers.BasicController.auto(term : String)

1 个答案:

答案 0 :(得分:1)

要启用自动完成功能,您必须提供JSONP object

在play2中,我使用这种模式取得了一些成功

$( "#tags" ).autocomplete({
        select : function(event, ui) {
            //... do something if selected
            return false;
        },
        source : function(request, response) {  
            $.ajax({
                url : "/myautocompletionEndpoint",
                dataType : "jsonp",
                data : {
                    q: request.term,
                },
                success : function(data) {

                    response(data);
                }
            });
        }
    });

在路由/myautocompletionEndpoint下,我提供了一个返回JSONP对象的控制器。

控制器方法的签名是:

public CompletionStage<Result> subjectAutocomplete(String q)

它会创建一个结果列表:

[
  {"label":"Some label","value":"Some Value"},
  ....
]

默认情况下,jQuery自动完成小部件会向控制器发送一个额外的回调参数,例如&callback=jQuery110208100147994940178_1491819270607。您必须获取它的内容并将结果列表包装到其中。您可以通过

从控制器中访问查询参数
request().queryString().get("callback");

所以最后看起来像是:

String result="/**/jQuery110208100147994940178_1491819270607([{"label":"Some label","value":"Some Value"}])";