我刚刚开始使用 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 数据。新项目和其他东西,如自定义状态等。