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

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

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

对于这项工作,您应该继续使用

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.newItemPUT     /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中的路由来获取正确的路径,而无需指定

url
and
type
。举个例子代替:

 $('.getAjaxForThisContainer').click(function(e) {    var idToGet = $("#someField").val();    $.ajax({        type : 'GET',        url : '@routes.Application.getItem()',        data: { id: idToGet        },        success : function(data) { // ... some pre on success        }    });    return false;});

您可以使用简化版本(

myJsRoutes
从第2点开始):

myJsRoutes.controllers.Application.getItem(idToGet).ajax({    success : function(data) { ... some pre ... }});

要么

myJsRoutes.controllers.Application.newItem().ajax({    success : function(data) { ... some pre ... }});

等等…

  • 您无需指定
    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({});


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5016273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存