【发布时间】:2014-04-04 00:04:58
【问题描述】:
我在这里阅读了几篇关于如何执行此操作的帖子,但我只能让它工作到一半。
这可行(将 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))
}
}
在第二种情况下,它永远不会到达日志记录代码。相反,它会立即返回一个 400 Bad Request(我认为这可能是在 Action (parse.json) 位中触发的)。
我宁愿将对象作为 json 发送,因为当我转换为字符串时,描述中恰好有一个撇号 (') 会搞砸。我可能会避开撇号,但希望我错过了一些关于如何使用对象而不是字符串来执行此操作的简单内容。
谢谢
【问题讨论】:
标签: ajax json scala playframework-2.0