Play 2.0 フレームワークを使い始めたばかりです。ajaxベースのフォーム送信を行う最良の方法は何だろうか. 現在、私のページには、(フォームの) 新しいエントリが表示されるフォームと下のリストが含まれています。ajaxによる投稿とリストの更新を行いたいです。
しかし、私の最初の質問は、ajax を介してフォームを送信し、フォーム バインディングとコントローラーの検証を使用する方法です。それは可能ですか?これを行う正しい方法は何ですか?
ありがとう、
Play 2.0 フレームワークを使い始めたばかりです。ajaxベースのフォーム送信を行う最良の方法は何だろうか. 現在、私のページには、(フォームの) 新しいエントリが表示されるフォームと下のリストが含まれています。ajaxによる投稿とリストの更新を行いたいです。
しかし、私の最初の質問は、ajax を介してフォームを送信し、フォーム バインディングとコントローラーの検証を使用する方法です。それは可能ですか?これを行う正しい方法は何ですか?
ありがとう、
私見では、play の JavaScript ルーティング機能、js 検証 (jquery バリデータ プラグインなど)、およびサーバー側の検証を使用できます。まず、ドメイン オブジェクトとして機能するケース クラスを宣言します。
case class SimpleUser( name: String, email: String )
次に、フォームと機能を備えたコントローラーを作成します。
object Users extends Controller{
//validation 1 goes here
val userForm = Form(
mapping(
"name" -> text,
"email" -> email
)(SimpleUser.apply)(SimpleUser.unapply)
)
def save = Action { implicit request =>
userForm.bindFromRequest().fold(
formWithErrors => {
BadRequest( "uuuups" )
},
user => {
//validation 2 goes here
Ok( "ok" )
}
)
}
}
これを取得したら、ルートファイルにエントリを追加します
POST /users/save controllers.Users.save
GET /jsroutes controllers.Application.javascriptRoutes
およびアプリケーションコントローラーで
def javascriptRoutes = Action { implicit request =>
import routes.javascript._
Ok(
Routes.javascriptRouter("jsRoutes")(
Users.save
) ).as("text/javascript")
}
そして今、JavaScriptの部分
(...)
save: function(){
jsRoutes.controllers.Users.save().ajax( {
data: jQuery( 'form' ).serialize(),
success: function( data ){
//refresh users' list
},
error: function( data ){
console.log( data.responseText );
}
});
}
これは単純な例ですが (コンパイルはしていません)、アイデアを示しています。
最速の方法は jQuery です。フォームをシリアル化し、一般的なjQuery.ajaxで送信するだけです。応答として、メソッドは ie を含む JSON データを送信する必要があります。カスタムステータスなどの新しいアイテムやその他のもの。