前台和后台互相傳遞數組


  最近做項目要用到將多個字符串通過jq的ajax傳遞給后台的功能,剛開始是想將字符串以某個分隔符的形式拼接起來再進行傳遞,如:

$.ajax{
      url:"xxxx",
      data:{
            array: "Jason,Sean,Danny"
      }
}

  然后后台獲取參數后再分隔,這種做法有很不好,如果你需要的參數里面包含分隔符,那么通過分隔后獲取到的數據便跟你想要的有出入了,此時最好的做法就是將其放入到一個數組里面再傳遞。即可將上述代碼改為:

$.ajax{
      url:"xxxx",
      data:{
            array: ["Jason","Sean","Danny"]
      }
}

  如果單純寫成這樣,在java后台是無法取到參數的,因為jQuery需要調用jQuery.param序列化參數,

jQuery.param( obj, traditional )

   默認的話,traditional為false,即jquery會深度序列化參數對象,以適應如PHP和Ruby on Rails框架, 但servelt api無法處理,我們可以通過設置traditional 為true阻止深度序列化,然后序列化結果如下:

array: ["Jason", "Sean", "Danny"]    =>    array=Jason&array=Sean&array=Danny

  這樣,我們就可以在后台通過request.getParameterValues()來獲取參數的值數組了。

 

  那么,在后台如果想把數組傳遞給jq該怎么做呢?

  方法有很多,其中比較好用的方法就是借助json來傳遞。

  想要用json來傳遞,在ajax里面要設置返回的dataType類型為:  

$.ajax{
      url:"xxxx",
      dataType: "json",
      data:{
            array: ["Jason","Sean","Danny"]
      }
}

  Java中要用到JSON必須導入以下這幾個jar包:commons-beanutils-1.8.0.jar,commons-collections-3.2.jar,commons-configuration-1.8.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar和json-lib-2.4.jar。

  后台可以先將數組的元素放到列表里面,在通過JSONArray的fromObject()方法轉換為JSON數組:

String[] data = req.getParameterValues("array");
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < data.length; i++) {
    list.add(data[i]);
    System.out.println(data[i]);
}
//將list裝換為Json數組(JSONArray)
JSONArray arry = JSONArray.fromObject(list);

  在數據傳輸過程中,json是以文本,即字符串的形式傳遞的,而JS操作的是JSON對象,所以還要設置

resp.setHeader("Cache-Control", "no-cache");
resp.setContentType("text/json; charset=utf-8");

  最后在通過respone的getWriter()方法將其傳給客戶端。

  示例:

  jsp部分:

<table>
      <tr>
          <td><input type="text" name="data" value="Jason" /></td>
      </tr>
      <tr>
          <td><input type="text" name="data" value="Sean" /></td>
      </tr>
      <tr>
          <td>
              <input type="text" name="data" value="Danny" />
              <input type="button" value="OK" onclick="arrayData();" />
          </td>
      </tr>
</table>

  js部分:

function arrayData(){            
    var array = $("input[name='data']");            
    var dataArray = new Array();    
    array.each(function(){
        dataArray.push($(this).val());
    });            
    //alert(dataArray);
            
    $.ajax({            
         type: "GET",
         url: "JsonServelet",
         dataType: "json",
         traditional: true,
         data: {
                array: dataArray
         },                              
         success: function(data){
            for ( var i = 0; i < data.length; i++) {
                alert(data[i]);
            }        
         }
    });
}

  Java部分:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    req.setCharacterEncoding("UTF-8");
    String[] data = req.getParameterValues("array");
    ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < data.length; i++) {
        list.add(data[i]);
        System.out.println(data[i]);
    }
    //將list裝換為Json數組(JSONArray)
    String json = JSONArray.fromObject(list).toString();         
    resp.setHeader("Cache-Control", "no-cache");
    resp.setContentType("text/json; charset=utf-8");
    resp.getWriter().print(json);
    resp.getWriter().flush();        
}

   部分參考:http://my.oschina.net/i33/blog/119506


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM