3 回答

TA贡献1878条经验 获得超4个赞
对于这项工作,您应该继续使用javascriptRoutes它,因为它会根据routes.conf生成正确的JS路径。您将在Zentask 示例中找到用法示例
无论如何,现在您可以通过将更url改为来修复AJAX调用
url : '@routes.Application.saveDefaultPhoneForUser()',
这种方法要求将整个JS放在模板中,这是错误的。可以甚至应该将其移动到单独的JS文件中,并使其成为可能,您需要使用javascriptRoutes。
更多...
javascriptRoutes 尚未在官方文档中描述,但这里是逐步的介绍。尽管描述看起来很复杂,但实际上使用这种方式会带来很多好处。
1.创建通用路线
首先,您需要在conf/routes文件中创建通用路由:
GET /item/:id controllers.Application.getItem(id: Long)
POST /item/new controllers.Application.newItem
PUT /item/:id controllers.Application.updateItem(id: Long)
当然,您至少需要在Application控制器中创建以下三个动作:
getItem(Long id){ ... }
newItem() { ... }
updateItem(Long id) { ... }
2.创建一个将通用路由转换为JS的动作
将其放置在某处,即。在您的Application控制器中
叫它吧 javascriptRoutes()
在该操作中,您将指向文件中的现有路由conf/routes
public static Result javascriptRoutes() {
response().setContentType("text/javascript");
return ok(
Routes.javascriptRouter("myJsRoutes",
routes.javascript.Application.getItem(),
routes.javascript.Application.newItem(),
routes.javascript.Application.updateItem(),
//inside somepackage
controllers.somepackage.routes.javascript.Application.updateItem()
)
);
}
注意:请勿在方括号中设置任何参数。
3.创建javascriptRoutes行动路线并将其包含在模板中
路线 conf/routes
GET /javascriptRoutes controllers.Application.javascriptRoutes
<head>部分检视/views/main.scala.html
<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>
4.在需要的地方使用javascriptRoutes
从现在开始,您可以使用JS中的路由来获取正确的路径,而无需指定urland type。举个例子代替:
$('.getAjaxForThisContainer').click(function(e) {
var idToGet = $("#someField").val();
$.ajax({
type : 'GET',
url : '@routes.Application.getItem()',
data : {
id: idToGet
},
success : function(data) {
// ... some code on success
}
});
return false;
});
您可以使用简化版本(myJsRoutes从第2点开始):
myJsRoutes.controllers.Application.getItem(idToGet).ajax({
success : function(data) { ... some code ... }
});
要么
myJsRoutes.controllers.Application.newItem().ajax({
success : function(data) { ... some code ... }
});
等等...
您无需指定type: "POST"-JS路由器将根据conf/routes规则使用正确的方法
您可以使用纯JS中的语法id将记录(或其他参数)设置为GET或PUT(或其他方法)routes-like
如果您的路线规则包含所有必需的参数,则可以将您的JS最小化:
路线:
GET /some/:a/:b/:c controllers.Application.getABC(a: String, b: Integer, c: String)
JS:
myJsRoutes.controllers.Application.getABC("a", 1, "b" ).ajax({});

TA贡献1795条经验 获得超7个赞
我喜欢“老好”的简单方法:
1在页面中,使用JQuery,
在一些偶数句柄中
$.get('/giveme', {'arg': value}, function(data) {
window.alert(data);
}
);
2在服务器/播放端
2.1路线: GET /giveme controllers.Application.giveme(arg)
2.2标量动作:
object Application extends Controller {
def giveme(arg:String) = Action {
Ok(Json.toJson("hello," + arg ))
}
}
添加回答
举报