2012-06-15 151 views
0

我是新來玩的框架,我有一個關於實現ajax的問題​​。 所以我實現了一個搜索頁面 - 上面有一個表單發回日期範圍。 這一切都工作。 但我想讓它與ajax一起工作,所以我有幾個問題。 我是否需要在控制器中創建新的表單類型?就像我以前做過的一樣?或者我可以手動獲取數據嗎?Ajax表單 - 獲取信息

所以目前我的HTML我有以下形式:

<form action="@routes.History.search()" class="pull-right" id="formHistory"> 
      MinDate: <input id="mindate" name="mindate" class="input-small" type="text"> 
      MaxDate: <input id="maxdate" name="maxdate" class="input-small" type="text"> 
      <button class="btn" type="submit">Search</button> 
     </form> 

,這裏是我的javascript:

$('#formHistory').submit(function(evt) { 
      $('#errors').show(); 
      $.ajax({ 
       type: 'POST', 
       url: jQuery("#formHistory").attr("action"), 
       data: jQuery("#formHistory").serialize(), 
       dataType: "json", 
       success: function(data) { 
        alert('History Search'); 
        $("tableHistory").find("tr:gt(0)").remove(); 
        alert(data.id[0].source); 
       }, 
       error: function(data) { 
        $('#errors').shows(); 
        alert('History search failed'); 
       } 
      }); 
      return false; 
     }); 

,並在我的history.java文件,我需要出去獲得JSON信息。以前我以

Form<Login> loginForm = form(Login.class).bindFromRequest(); 

做到了這一點,但我沒有與最小和最大日期的對象可我剛剛得到的JSON信息進行手動?

public static Result search() { 
//So here I would like to get the form information 
} 

接下來的問題是如何做到相反?一旦我得到最小和最大日期,從數據庫中獲得信息,我需要發回迴應。我應該發回一個數據列表的JSON響應,以及如何在JavaScript中處理這個問題?或者我在服務器上創建html並將其作爲字符串發送並附加到apporpriate元素中? 或者我在某些演示中看到的其他選項是創建一個視圖並將其傳回並僅顯示較小的視圖

回答

0

我最終放棄了它,並沒有使用ajax。 但如果我要使用它,我會用一個Ajax請求:

jsRoutes.controllers.Application.ajaxCommand().ajax({ 
    data : { 
     "var1" : "a", 
     "var2" : "b" 
    }, 
    success : function(data) { 
     // .. DO something 
    }, 
    error : function(data) { 
     // .. DO something 
    } 
}); 

,並在服務器端使用DynamicForm: 喜歡的東西:

public static Result ajaxCommand() { 
    DynamicForm data = form().bindFromRequest(); 
    String var1 = data.get("var1"); 
    String var2 = data.get("var2"); 
    // .. Do something 
} 
0

您應該能夠從表單中獲取數據,就像在將其作爲AJAX發送之前一樣。如果你不能得到它的工作,你可以用

Map<String, String[]> params = request().body().asFormUrlEncoded(); 

至於如何將數據發送回客戶端手動獲取數據,無論您的建議是有效的。最簡單的方法是僅使用<html>和<主體>標記呈現視圖,並使用jQuery將結果放入元素中。

success: function(data) { 
    $('#myContentDiv').html(data); 
} 

json方法可能會稍微提高性能,但實現起來要複雜得多。很多人會說html方法是一種不好的方法,因爲它在服務器上使用了大量的資源。對於PHP,Ruby on Rails甚至是Play 1.x,這個說法可能是正確的,但在第二回閤中,視圖被完全編譯,並且渲染過程非常快。

如果您選擇使用json方法,我會推薦使用類似knockout.js的東西。