2012-10-11 32 views
3

我正在嘗試使用JavaScript路由發出POST請求。在路由文件:如何在Play Framework中使用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體傳遞參數,而不是一個請求字符串?

回答

9

德看看ajax() documentation - 也就是說,這樣的例子:

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

由於Play JavaScript的航線已經確定url和請求的方法(type),你只需要添加data(當然你不需要指定它們作爲括號中的PARAMS)

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

您也可以文本只發送給定的客戶端(由URL確定的(也可以是POSTPUT看起來更好:)):

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

所以它會執行PUT請求http://domain.tld/comments/123text將在form()可作爲它與POST發送:

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

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); 
} 
+0

工作良好。 ajax函數中缺少{}: [...]。ajax({ }) – Groben

0

,因爲我不很明白在播放的JsRoutes,我所做的就是:

在我看來:

var client = 1; 

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

而在我的路線,在調用方法:

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

這工作讓瀏覽器做類似的路線定義的普通Ajax調用一些URL請求。

相關問題