5

我正在尝试使用 play framework 2.1 (java) 来实现一些简单的事情:

通过 jquery 发布 JSON 数据,并从控制器中检索它。

你能告诉我我哪里错了吗?

它从一个 javascript 调用开始:

var object = new Object();

object.title = "Hamlet";
object.author = "Bill";

var jsonData = JSON.parse(JSON.stringify(object));
jsRoutes.controllers.Application.update().ajax({
    type : 'POST',
    dataType : 'json',
    data : jsonData,
    success : function(data) {
        // I get the success
    },
    error : function(data) {
        alert('error');
    }
});

数据似乎已正确发布:Firebug 控制台:

标题:

Response Headers
Content-Length  2
Content-Type    text/plain; charset=utf-8
Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate

... 参数

Parametersapplication/x-www-form-urlencoded
title   Hamlet
author  Bill
Source
title=Hamlet&Author=Bill

它在这里路由:

POST    /update       controllers.Application.update()

这是应用程序控制器:

@BodyParser.Of(BodyParser.Json.class)
public static Result update() {
    JsonNode json = request().body().asJson();

    if(json == null){
        return badRequest("empty json"); // PROBLEM: THE JSON IS ALWAYS NULL
    }
    return ok("{}");
}

我得到的问题是我无法从请求中检索我的参数。如果我打印它, request() 似乎是空的:

DefaultRequestBody(None,None,None,None,None,None,true)

你看出我哪里错了吗?我怎样才能得到正确的 JSON?

提前致谢

4

2 回答 2

5

我有完全相同的问题。除了dataType,您还必须设置contentType,正如原始海报所建议的那样:

var jsonMsg = JSON.stringify(msg);
jsRoutes.controllers.Application.sendJson().ajax({
    type : 'POST',
    dataType : 'json',
    contentType : 'application/json; charset=utf-8',
    data : jsonMsg
});
于 2013-08-01T12:50:48.003 回答
0

这可能会对您有所帮助 这个示例展示了如何通过逐步播放实现 ajax 播放 2.x:如何使用公共按钮发出 AJAX 请求

于 2014-01-07T13:15:46.510 回答