POST ING JSON到服務器玩框架:從JavaScript播放框架2.5 AJAX JSON路線參數異步的MongoDB
var myJson = {"name": "joe", "age":20};
var obj = JSON.parse(myJson);
$.ajax(jsRoutes.controllers.MyController.create(obj));
現在,我的JavaScript路由器配置的罰款。如果我將obj作爲字符串接收,我可以將它打印到控制檯上。
routes.conf:
POST /person/add controllers.MyController.createFromAjax(ajax: String)
,但我想用一個異步的承諾,其激活給出了編譯時錯誤寫JSON來的MongoDB:
scala.concurrent.Future[play.api.mvc.Result][error] cannot be applied to (String)
我有采取接收使用郵差和JSON無參數等航線它寫的MongoDB就好
3210如果我省略從阿賈克斯接收,而不是使用郵差的JSON的路徑上的參數,我得到的兄弟一個HTTP 400錯誤wser。
POST http://localhost:9000/person/add 400 (Bad Request)
所以,我的問題是,Ajax需要一個參數,但String不會工作。播放文檔說json總是以字符串形式接收。我在這裏做錯了什麼?
斯卡拉控制器從Lightbend種子Play.Reactive.MongoDB採取代碼:
def createBulkFromAjax = Action.async(parse.json) { request =>
val documents = for {
heartRate <- request.body.asOpt[JsArray].toStream
maybeHeartRate <- heartRate.value
validHeartRate <- maybeHeartRate.transform(transformer).asOpt.toList
} yield validHeartRate
for {
heartRate <- hrFuture
multiResult <- heartRate.bulkInsert(documents = documents, ordered = true)
} yield {
Logger.debug(s"Successfully inserted with multiResult: $multiResult")
Created(s"Created ${multiResult.n} heartRate")
}
}
你能告訴我們你的控制器代碼嗎? – millhouse
添加了Scala控制器代碼。 –