0

我是 play 框架的新手,我有一个关于实现 ajax 的问题。所以我实现了一个搜索页面——上面有一个发送日期范围的表单。这一切都在起作用。但我想让它与 ajax 一起工作,所以我有几个问题。我需要在控制器中创建一个新的表单类型吗?就像我以前做过的那样?或者我可以手动获取数据吗?

所以目前在我的html中,我有以下形式:

<form action="@routes.History.search()" class="pull-right" id="formHistory">
            MinDate: <input id="mindate" name="mindate" class="input-small" type="text">
            MaxDate: <input id="maxdate" name="maxdate" class="input-small" type="text">
            <button class="btn" type="submit">Search</button>
        </form>

这是我的javascript:

$('#formHistory').submit( function(evt) {
            $('#errors').show();
            $.ajax({
                type: 'POST',
                url:  jQuery("#formHistory").attr("action"),
                data: jQuery("#formHistory").serialize(),
                dataType: "json",
                success: function(data) {
                    alert('History Search');
                    $("tableHistory").find("tr:gt(0)").remove();
                    alert(data.id[0].source);
                },
                error: function(data) {
                    $('#errors').shows();
                    alert('History search failed');
                }
            });
            return false;
        });

在我的 history.java 文件中,我需要获取 json 信息。以前我已经通过使用

Form<Login> loginForm = form(Login.class).bindFromRequest();

但是我没有最小和最大日期的对象,我可以手动获取 json 信息吗?

public static Result search() {
//So here I would like to get the form information 
}

下一个问题是如何反向执行此操作?一旦我得到最小和最大日期,从数据库中获取信息,我需要发回响应。我应该发回带有数据列表的 json 响应以及如何在 javascript 中处理它?还是我在服务器上创建 html 并将其作为字符串发送并将其附加到适当的元素中?或者我在一些演示中看到的另一个选项是创建一个视图并将其传回并只渲染较小的视图

4

2 回答 2

0

您应该能够从表单中获取数据,就像在将其作为 ajax 发送之前一样。如果你不能让它工作,你可以手动获取数据

Map<String, String[]> params = request().body().asFormUrlEncoded();

至于您如何将数据发送回客户端,您的两个建议都是有效的。最简单的方法是只渲染一个没有 <html> 和 <body> 标签的视图,然后使用 jQuery 将结果放入一个元素中。

success: function(data) {
    $('#myContentDiv').html(data);
}

json 方法可能会提供更好的性能,但实现起来要复杂得多。许多人会争辩说 html 方法是一种不好的方法,因为它在服务器上使用了很多资源。这个论点可能适用于 PHP、Ruby on Rails 甚至 Play 1.x,但在 play 2 中,视图已完全编译,并且渲染过程非常快。

如果您选择使用 json 方法,我建议您使用类似knockout.js的方法。

于 2012-06-15T07:53:01.590 回答
0

我最终离开了它,没有使用 ajax。但如果我要使用它,我会使用 ajax 请求:

jsRoutes.controllers.Application.ajaxCommand().ajax({
    data : {
        "var1" : "a",
        "var2" : "b"
    },
    success : function(data) {
        // .. DO something
    },
    error : function(data) {
        // .. DO something
    }
});

并在服务器端使用 DynamicForm :类似于:

public static Result ajaxCommand() {
    DynamicForm data = form().bindFromRequest();
    String var1 = data.get("var1");
    String var2 = data.get("var2");
    // .. Do something
}
于 2012-08-02T07:18:53.403 回答