2

私はプレイフレームワーク2.0.4を使用しています

私はルートを持っています:

POST /addMail controllers.Application.addMail()

私のコントローラーアプリケーションでは、 addMail メソッドを定義します:

public static Result addMail()
{
    JsonNode json = request().body().asJson();
    Long id = json.findPath("id").asLong(0);
    String email = json.findPath("email").getTextValue();
    GameScore gs = GameScore.findById(id);
    gs.setEmail(email);
    gs.save();
    return ok();
}

CURL を介してこのメ​​ソッドを呼び出すと、問題はありません。

curl --header "Content-type: application/json" --request POST --data '{"id": 13, "email": "test@DB.com"}' http://localhost:9000/addMail

しかし、AJX リクエストを介してこのメ​​ソッドを呼び出すと、500 レスポンスが返されます。

$addMailBtn.click(function(event) { 
        $this = $(this);
                var id = $this.attr("id").substring(14);
        var email = $("#saisieMailField_" + id).val();
        $.ajax({
                type: 'POST',
                url: "@routes.Application.addMail()",
        dataType:"json",
        data: {"id":id, "email": '"' + email + '"'},
                success: location.reload()
        })
    } );

コンソールにjsonデータを出力すると、ajaxリクエストを実行するとjsonデータがnullになりますが、curlでは問題ありません。

メソッドに @BodyParser.Of(play.mvc.BodyParser.Json.class) を追加しようとしましたが、何も変わりません。

御時間ありがとうございます。

4

1 に答える 1

1

これは私にとってはうまくいきます。JSONオブジェクトを文字列化することに注意してください。これがあなたの問題だと思います。

$.ajax({
        type: "POST",
        url: "http://myservice:9000/api/v1/positions",        
        data: JSON.stringify({"nwLng":72.22,"nwLat":22.22, "seLng":22.22,"seLat":55.33}),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) { alert(data); },
        failure: function (errMsg) { alert(errMsg); }
    }); 
于 2013-03-01T12:14:05.287 に答える