Pom*_*oma 3 java playframework-2.0
我正在尝试使用JavaScript路由发出POST请求.在路线文件中:
POST /comments controllers.Clients.addComment(text: String, client: Int)
GET /assets/javascripts/routes controllers.Application.javascriptRoutes()
Run Code Online (Sandbox Code Playgroud)
在页面上:
jsRoutes.controllers.Clients.addComment(args.text, @client.id).ajax(...);
Run Code Online (Sandbox Code Playgroud)
但它创造了请求
POST http://localhost:9000/comments?text=qwe&client=1 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
如何让它在POST正文中传递参数而不是请求字符串?
看看ajax()文档 - 也就是这样的例子:
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
});
Run Code Online (Sandbox Code Playgroud)
由于Play JavaScript路由已经定义url并请求method(type),您只需要添加data(当然您不需要将它们指定为括号中的参数)
jsRoutes.controllers.Clients.addComment().ajax(
data: {
client: @client.id,
text: args.text
}
);
Run Code Online (Sandbox Code Playgroud)
此外,您只能向给定的客户端发送文本(由URL确定(它可以POST但PUT看起来更好:) :):
PUT /comments/:client controllers.Clients.addComment(client: Int)
Run Code Online (Sandbox Code Playgroud)
在视图中:
jsRoutes.controllers.Clients.addComment(@client.id).ajax(
data: { text: args.text }
);
Run Code Online (Sandbox Code Playgroud)
因此它将执行PUT请求,http://domain.tld/comments/123并将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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5409 次 |
| 最近记录: |