【问题标题】:Play action not responding to json posted播放动作不响应 json 发布
【发布时间】:2013-02-10 20:01:07
【问题描述】:

我是新手,我正在尝试使用 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()

【问题讨论】:

  • 您没有向服务器发送 JSON。
  • 您发送的是经典表单参数,而不是 Json。这是一个 Jquery 问题,与 playframework 无关。搜索“jquery 将表单序列化为 json”以获取更多详细信息。或者只是在控制器中处理表单数据。
  • @JulienLafont & dfsq - 请用 JSON 的表单序列化示例给出答案(不是评论)。
  • 非常感谢大家的帮助
  • 在输入编辑描述时,我不小心按了回车键而不是退格键,它应该是“重新标记,将 java 更改为 JavaScript”。也许你应该阅读 JavaScript 的标签 wiki。

标签: java javascript jquery json playframework-2.0


【解决方案1】:

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

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,还有一堆其他的Results,甚至是原始的:status(int),所以你可以在 jQuery 中读取状态而不会传递任何其他失败原因。

如果您出于任何原因确实需要将表单序列化为 JSON,请告诉我,我会向您发送示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多