1

我是新手,我正在尝试使用 JQuery 将表单数据发布到我的 Play Action。但是,我收到了来自 Action 的“预期的 json”响应。我检查 HTTP 标头以确保正在发送数据并且确实如此,我哪里出错了,我该如何解决它。(有没有更好的方法)

脚本:

$(document).ready (function (){
    $("form").submit (function (e) {
        e.preventDefault();
        $.post("/save",$(this).serialize(),function (data){
            alert(data);
        });
     });
});

行动

public static Result save()
{
    JsonNode json = request().body().asJson();
    if (json == null)
    return ok("expected json");
    else
    {
        String value = json.findPath("video").getTextValue();
        if (value == null)
            return ok("did not find");
        else
            return ok(value) ;
    }
}

路线

  POST   /save                         controllers.Application.save()
4

1 回答 1

2

两者:Julien Lafontdfsq都是正确的,首先:您没有将表单序列化为 JSON,其次,正如 Julien 所说,您不需要...使用您当前的 JS,您可以DynamicForm在您的save操作中使用:

public static Result save() {
    DynamicForm df = form().bindFromRequest();

    String value = df.get("video");
    if (value == null || value.trim().equals(""))
        return badRequest("Video param was not sent");

    // do something with the value

    return ok(value);
}

顺便说一句,不要ok()用于返回错误请求的响应。你有很多选项:badRequest()notFound()TODO和一堆其他的结果,甚至是 raw: status(int),所以你可以在 jQuery 中读取状态,而不会传递任何其他失败的原因。

如果您出于任何原因真的非常需要将表单序列化为 JSON,请告诉我,我会给您发送一个示例。

于 2013-02-10T21:15:13.213 回答