0

私はプレイ フレームワークが初めてで、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を使用せずにそのままにしてしまいました。しかし、それを使用する場合は、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 に答える
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 に答える