【问题标题】:Pass List<String> to Jquery in Play Framework在 Play 框架中将 List<String> 传递给 Jquery
【发布时间】:2015-08-07 14:27:33
【问题描述】:

我正在使用 Play 2.2.6,需要从控制器获取 List&lt;String&gt;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 响应非常适合字符串类型,例如如果我说

return ok("This is string");

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

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

顺便提一下,我在路由中将此方法定义为 POST。

有什么建议吗?

【问题讨论】:

  • 与 index() 方法相关联的 GET 调用会引发错误,而您发布的代码与 list() 方法(与 POST 调用相关联)相关。对吗?
  • 那么,您能否发布 index() 方法的代码,这是引发错误的方法?
  • 编辑了问题!

标签: java jquery ajax playframework-2.0


【解决方案1】:

问题是您正在使用呈现的索引模板进行响应,并且在尝试呈现该模板时抛出异常。您要做的是使用 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 响应中,您现在将拥有一个包含经度和纬度值的节点列表

【讨论】:

  • 我想传递包含纬度和经度的列表或数组,然后我将在 index.html 中对其进行迭代以构建谷歌地图对象!
  • 我添加到答案中。然后,您将遍历响应数据并从每个节点中提取经度和纬度值。如果您仍然遇到问题,请告诉我
猜你喜欢
  • 2015-11-20
  • 2015-07-02
  • 2012-12-02
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多