您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Play 2.x:如何使用通用按钮发出AJAX请求

Play 2.x:如何使用通用按钮发出AJAX请求

对于这项工作,您应该继续使用javascriptRoutes它,因为它会根据routes.conf生成正确的JS路径。您可以在Zentask 示例中找到用法示例

无论如何,现在您可以通过将更url改为来修复AJAX调用

url : '@routes.Application.saveDefaultPhoneForUser()',

这种方法要求将整个JS放在模板中,这是错误的。可以甚至应该将其移动到单独的JS文件中,并使其成为可能,您需要使用javascriptRoutes。

在官方文档中描述,但这里是逐步的介绍。尽管描述看起来很复杂,但 实际上 使用这种方式会带来很多好处。

首先,您需要在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控制器中创建以下三个动作:

在该操作中,您将指向文件中的 路由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()
        )
    );
}

请勿在方括号中设置任何参数。

路线 conf/routes

GET     /javascriptRoutes     controllers.Application.javascriptRoutes

<head>部分检视/views/main.scala.html

<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>

从现在开始,您可以使用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 ... }
});

等等…

路线:

GET   /some/:a/:b/:c    controllers.Application.getABC(a: String, b: Integer, c: String)

JS:

myJsRoutes.controllers.Application.getABC("a", 1, "b" ).ajax({});
其他 2022/1/1 18:14:51 有427人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶