2013-02-10 45 views
1

我是新來玩,我正嘗試使用JQuery將表單數據發佈到我的Play動作。不過,我得到了Action的「預期json」響應。我檢查HTTP標頭,以確保數據被髮送,就這樣了,我要去哪裏錯了,我怎麼能解決這個問題(是否有這更好的辦法)播放操作沒有響應json發佈

腳本:

$(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() 
+3

你沒有發送JSON到服務器。 – dfsq 2013-02-10 20:04:36

+1

你發送的是經典的表單參數,而不是Json。這是一個jquery問題,與玩框架無關。搜索「jquery序列化表單爲json」以獲取更多詳細信息。或者只是在控制器中處理表單數據。 – 2013-02-10 20:27:45

+0

@JulienLafont&dfsq - 請給出一個答案(不是評論)與表單序列化樣本到JSON。 – biesior 2013-02-10 20:31:42

回答

2

兩個:朱利安樂峯dfsq是正確的,第一:你是不是你的序列化形式JSON,第二,如朱利安說,你不需要......使用當前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出於任何原因,請告訴我,我會向您發送一個示例。