Play Framework with Ajax And Json

摘要:Play Framework with Ajax And Json

這東西真的沒這麼好容易就湊出來,感覺網路文章,沒講的很清楚,害我try了老半天。(感覺也是英文太差的關係導致)

可參考這篇文章

http://www.playframework.org/documentation/1.2/ajax

花了不久時間終於試出來了。

首先,這篇文章,沒有提到如何製作json,也沒提到需要加一個html,或許他認為這是一個common sence,

對我來講,或許就是資料講的不夠多,

 

如果我們要做一個jquery ajax的功能,

首先在Controller ,加入 一個action (method)  

例:information


    public static void information(final String server_type)
    {
            MySQLAdodb adodb = new MySQLAdodb(server_type);
            render(adodb);
    }

而要在view,加入一個相對的html 

information.html


{
"db_name":  ${adodb.db_name},
"user_name":  ${adodb.user_name},
"password":  ${adodb.password},
  "server_ip":  ${adodb.server_ip}
}

然後可以設定route,將某個很直接的網址,對應Controller.action

開始conf/route設定檔

撰寫

GET /information.json            Config.information  

然後開始撰寫javascript端的JQuery 呼叫,目前試出以下三種方式皆可。

其中Config是,Config Controller


   var listAction = #{jsAction @Config.information(':server_type') /}

   $('#result').load(
       listAction({server_type: 'local'}),
       function() {
           $('#content').css('visibility', 'visible')
       }
   );

   $.post(listAction({server_type:'local'}), function(data) {
      $('#result2').html(data);
   });

   $.ajax({
      url: "information.json",
      type: 'GET',
      data: {
        server_type:'local'
      },
      error: function(xhr) {
        alert('Ajax request 發生錯誤');
      },
      success: function(response) {
          $('#result3').html(response);
      }
   });

html tag如下


<div id="content">
<div id="result"></div>
</div>
<div id="content2">
<div id="result2"></div>
</div>
<div id="content3">
<div id="result3"></div>
</div>

 

如果是要取得JOSN的話,應該是不用html,而是直接呼叫

 renderJSON(adodb);

但相對的JQuery端的限制,

就是ajax必須設定 datatype為json

或使用$.getJSON

網路上有寫為何$.getJSON會出錯,那是因為$.getJSON並需搭配renderJSON(adodb);才能運作。

 

以下是讀JSON的方式。

java端


    public static void informationJSON(final String server_type)
    {
            MySQLAdodb adodb = new MySQLAdodb(server_type);
            renderJSON(adodb);
    }

javascript


   $.ajax({
     url: "informationJSON.json",

     type: "GET",
      data: {
        server_type:'local'
      },
     dataType: "json",

     success: function(Jdata) {           
        $('#result4').html(Jdata['db_name']);
     },
       error: function() {
       alert("ERROR!!!");
     }
   });
$.getJSON('informationJSON.json?server_type=local', function(data) {
            $('#result4').html(data['db_name']);
         });

route 則是

GET /informationJSON.json            Config.informationJSON  

html 則是


<div id="content3">
<div id="result3">123</div>
</div>
<div id="content4">
<div id="result4">123</div>
</div>

 

a simple value with json example

Java


    public static void getCountryMaxId(final String country) {
        String max_id = country + "_"+10;
        Object[] array = {max_id};
        renderJSON(array);
    }

 

Javascript


                alert("getJSON");
                $.getJSON('getCountryMaxId?country=local', function(data) {
                     alert('json sucess');
                     alert(data[0]);
                });


                $.ajax({
                    //url: "http://localhost:9000/Package/getCountryMaxId",
                    //url: "/Package/getCountryMaxId",
                    url: "getCountryMaxId",
                    type: "GET",
                    data: {
                       country:'local'
                    },
                    dataType: "json",
                    success: function(data) {
                        alert('sucess');
                        alert(data[0]);
                    },
                      error: function() {
                      alert("ERROR!!!");
                    }
                  });