これを行う方法に関するいくつかの投稿をここで読みましたが、途中でしか機能しません。
これは機能します(jsonオブジェクトをテキストとして送信します):
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: '{"reqid":0,"iid":2,"description":"adsf"}',
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
これはしません(オブジェクトをjsonとして送信します):
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: {"reqid":0,"iid":2,"description":"adsf"},
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
そして、私が本当にやりたいことは、次のようなものです (適切なコンビネータを既にセットアップしています)。
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: @Html(Json.stringify(Json.toJson(item))),
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
私のコントローラーは次のようになります。
def addItem(id: Long) = Action (parse.json) { implicit request =>
Logger.info("add item")
request.body.validate(Item.itemReads).map { item =>
thing.addItem(item)
Ok("Succesfully added item.")
}.recoverTotal{
e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
}
}
2 番目のケースでは、ログ コードに到達しません。代わりに、すぐに 400 Bad Request を返します (これはおそらく Action (parse.json) ビットでトリガーされたものだと思います)。
オブジェクトをjsonとして送信したいのは、文字列に変換すると、説明にアポストロフィ( ')が含まれているため、混乱します。おそらくアポストロフィをエスケープできますが、文字列ではなくオブジェクトを使用してこれを行う方法について簡単なことを見逃していることを願っています。
ありがとう