我正在使用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。
有什么建议吗?
答案 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响应中,您现在将拥有一个包含经度和纬度值的节点列表