我正在尝试使用 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 主体中传递参数而不是请求字符串?
最佳答案
看看ajax() documentation - 也就是这样的例子:
$.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 决定(它可以是 POST
但 PUT
看起来更好 :)):
PUT /comments/:client controllers.Clients.addComment(client: Int)
在 View 中:
jsRoutes.controllers.Clients.addComment(@client.id).ajax(
data: { text: args.text }
);
因此它将对 http://domain.tld/comments/123
执行 PUT 请求和 text
将在 form()
中提供因为它是用 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);
}
关于java - 如何在 Play Framework 中使用 POST 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835440/