Ajax表单 - 获取信息

时间:2012-06-15 06:55:19

标签: playframework playframework-2.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并将其作为字符串发送并将其附加到apporpriate元素中? 或者我在一些演示中看到的另一个选项是创建一个视图并将其传递回来并仅渲染较小的视图

1 个答案:

答案 0 :(得分:0)

您应该能够从表单中获取数据,就像在将其作为ajax发送之前一样。如果您无法使用它,您可以使用

手动获取数据
Map<String, String[]> params = request().body().asFormUrlEncoded();

至于如何将数据发送回客户端,您的两条建议都是有效的。最简单的方法是在不使用&lt; html&gt;的情况下渲染视图和&lt; body&gt;标签,并使用jQuery将结果放入元素中。

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

json方法可能会提供稍好的性能,但实现起来要复杂得多。许多人会认为html方法是一种糟糕的方法,因为它在服务器上使用了大量的资源。这个论点可能适用于PHP,Ruby on Rails甚至是Play 1.x,但是在游戏2中,视图是完全编译的,渲染过程非常快。

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