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 を段階的に実装する方法を示すのに役立つかもしれません Play 2.x: How to make an AJAX request with a common button

于 2014-01-07T13:15:46.510 に答える