3

我正在尝试使用 JavaScript 路由发出 POST 请求。在路由文件中:

POST /comments controllers.Clients.addComment(text: String, client: Int)
GET /assets/javascripts/routes controllers.Application.javascriptRoutes()

在页面上:

jsRoutes.controllers.Clients.addComment(args.text, @client.id).ajax(...);

但它创建了请求

POST http://localhost:9000/comments?text=qwe&client=1 HTTP/1.1

如何让它在 POST 正文中传递参数而不是请求字符串?

4

2 回答 2

9

看看ajax() 文档- 就是这样的例子:

$.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John", location: "Boston" }
});

由于Play JavaScript 路由已经定义url和请求方法(type),您只需要添加data(当然您不需要将它们指定为括号中的参数)

jsRoutes.controllers.Clients.addComment().ajax(
    data: {
      client: @client.id,
      text: args.text
    }
);

您也可以只向给定的客户端发送文本(由 URL 确定(可以POSTPUT看起来更好:)):

PUT /comments/:client     controllers.Clients.addComment(client: Int)

在视图中:

jsRoutes.controllers.Clients.addComment(@client.id).ajax(
    data: { text: args.text }
);

因此,它将执行 PUT 请求,http://domain.tld/comments/123并且textform()使用 POST 发送时可用:

public static Result addComment(int client) {
    String receivedText = form().bindFromRequest().get("text");
    // save it to DB ...
    return ok( "Added comment: "+ receivedText+ ". for client id: " + client);
}
于 2012-10-11T09:36:52.207 回答
0

由于我不太了解 Play 中的 JsRoutes,所以我所做的是:

在我看来:

var client = 1;

$.ajax({
    type: "POST",
    url: "/comments/" + client,
});

在我的路线中,对方法的调用:

GET /comments/:client     controllers.Clients.addComment(client: Int)

这可以让浏览器像对路由中定义的某些 URL 的普通 ajax 调用一样发出请求。

于 2016-05-13T15:01:07.867 回答