我已經閱讀了幾篇關於如何做到這一點的文章,並且我可以讓它在中途工作。發送ajax json播放框架的正確方法
此作品(發送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錯誤請求(這可能是我認爲在Action(parse.json)位觸發的東西)。
我寧願發送對象作爲json,因爲當我轉換爲字符串和描述恰好有一個撇號('),弄亂了事情。我可能probaby逃避撇號,但希望我錯過了一些簡單的事情如何用一個對象而不是字符串做到這一點。
感謝
我做了一些修改的問題。我現在明白dataType與響應有關,但我仍然有問題發回JSON對象。它看起來像我有效的JSON,但我不斷收到「無效的JSON」400錯誤。這不是由我的控制器代碼直接引發的,因爲它從來沒有設法訪問日誌記錄語句。 – jb44
我遇到了同樣的問題。答案是檢查,但我沒有看到任何不同。你是否仍然需要串化json對象? – Khanetor