将List <string>传递给Play Framework中的Jquery

时间:2015-08-07 14:27:33

标签: java jquery ajax playframework-2.0

我正在使用Play 2.2.6,需要从控制器获取List<String>String[]到我的jQuery Ajax调用。

我的控制器如下:

 public static Result list(){
    List<String> cname = new ArrayList<String>();
    String[] arr= new String[]{"abc","abc2"};
    return ok(index.render(arr));
}

索引方法代码:

public static Result index(){
    String[] arr= new String[]{"abc","abc2"};
    return ok(index.render(arr));
}

我的jQuery函数如下:

<script>
$(function() { 
    ajaxCall(); 
}); 
var ajaxCall = function() {
    var ajaxCallBack = {
        success : onSuccess,
        error : onError
    }

    jsRoutes.controllers.Application.list().ajax(ajaxCallBack);
};

var  onSuccess = function(data) {
    console.log(data)
} 
var onError = function(error) {
    alert(error);
}
</script>

此脚本位于index.scala.html文件中,路由为:

GET     /                   controllers.Application.index()
POST    /                   controllers.Application.list()
GET     /javascriptRoutes   controllers.JavascriptRoute.javascriptRoutes

Ajax响应适用于String类型,例如如果我说

return ok("This is string");

然后我可以在Ajax响应中看到它,但无法弄清楚为什么数组或列表会抛出错误:

  

内部服务器错误,对于(GET)[/] - &gt;
  找不到符号[symbol:method ok(java.lang.String [])] [location:class controllers.Application]

提到我在路线中将此方法定义为POST。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

问题是您正在使用呈现的索引模板进行响应,并且在尝试呈现该模板时会抛出异常。您要做的是使用JSON数据进行响应。

public static Result list(){
    String[] arr= new String[]{"abc","abc2"};
    return ok(Json.toJson(arr));
}

使用以下代码在我的浏览器中进行本地测试

$.ajax({
    method: "POST",
    url: "/",
    dataType: "script",
    success : function(data) {
        console.log(JSON.parse(data));
    }
});

编辑: 所以你可以这样做:

List<ObjectNode> objectNodes = new ArrayList<>();
ObjectNode objectNode = Json.newObject();
objectNode.put("Latitude", "13.679389");
objectNode.put("Longitude", "-13.679389");
objectNodes.add(objectNode);
// create loop to add more nodes
return ok(Json.toJson(objectNodes));`

在您的ajax响应中,您现在将拥有一个包含经度和纬度值的节点列表