1. 程式人生 > >JQuery中Ajax實現對Map,List集合資料的接收

JQuery中Ajax實現對Map,List集合資料的接收

jQuery中Ajax接收後臺Map、List集合資料實現過程

最近學習到jQuery實現非同步傳輸資料部分,雖然跟著視訊演練了常規json資料的接收,但個人感覺不太夠,現實應用中肯定不只是傳輸簡短以及簡單的json資料,於是自己琢磨著嘗試從後臺接收List、Map資料,在搜尋工具的幫助以及自身的理解下,成功完成了接收過程。廢話不多說,以程式碼來展示過程:

* 前端jsp登入端程式碼+js程式碼

//body部分
<body>
    <div id="loginDemo">
        使用者名稱:<input type="text" id="username"
><br> 密&nbsp;碼<input type="password" id="password"><br> <input type="button" value="登入" id="btn"/><br> <span id="msg"></span> </div> <div id="showUsers"></div> </body> //js部分 $(document).ready(function(){ $("#btn"
).click(function(){ var params ={"user.username":$("#username").val(), "user.password":$("#password").val()}; $.ajax({ url:"login", type:"post", data:params,//將json資料傳給後臺,供後臺處理 dataType:"json", success:function
(data){ if(data.msg=="登陸成功!"){ //以User物件方式接收 $("#loginDemo").append(data.user.username+"<br>"); //以List集合物件users接收,在後臺是集合物件,但傳回前臺後自動轉換成了陣列物件 $("#loginDemo").append(data.users[0].username+"<br>"); //以Map物件m接收,Ajax預設支援Map型別資料,細想一下,map型資料不有點像json資料嗎 $("#loginDemo").append(data.m.user1.username+"<br>"); }else $("#msg").html(""); $("#msg").append(data.msg); }, error:function(){ alert("登陸失敗!") } }) }); });
前端部分程式碼比較簡單,就是一個登陸框,以json資料格式的方式提交給後臺,請求成功時,輸出傳回的實體物件型資料,List集合型資料,以及關鍵的Map型集合資料

struts.xml核心部分程式碼

<package name="default" namespace="/" extends="json-default">
        <action name="login" class="com.cn.action.UserAction" method="login">      
            <result type="json">
                <param name="includeProperties">
                    user.*,users.*,msg,m.*
                </param>
            </result>
        </action>
    </package>
//注意一定要繼承json-default,且要提前引入相關的jar包,對於程式碼裡面各引數的作用以及用法就不作過多贅述了

action中核心程式碼

public class UserAction extends ActionSupport {
    private User user;
    private List<User> users;
    private Map<String,User> m ;
    private String msg;

    public String login(){
        if("admin".equals(user.getUsername())&&"111111".equals(user.getPassword())){
            user = new User("admin","111111");
            //建立集合物件
            users = new ArrayList<User>();
            users.add(new User("Linda","memeda"));
            users.add(new User("Mary","lalala"));
            users.add(user);
            //建立map物件
            m = new HashMap<String,User>();
            m.put("user1", new User("XiaoJing","yuyuyu"));
            m.put("user2", new User("KangGe","kangying"));

            msg = "登陸成功!";
        }else{
            msg = "登入失敗3";
        }
        return SUCCESS;
    }
    //後續對成員屬性的setter和getter方法沒有列出,沒有列出並不代表不重要,如果沒有設定setter和getter方法是無法獲取到前臺發過來的資料的。

列出此過程幾個比較重要的核心知識點

  1. 前臺Ajax的格式書寫,包括髮送給後臺的json資料,以及對後臺傳回資料的接收,注意map、list以及實體物件型資料的接收方式。對於陣列型別的資料還存在遍歷的問題,過程並不複雜,故此處並未列出
  2. struts.xml的配置。在struts.xml中,必須繼承json-default,而繼承此package又需要相關的jar包支援,因此必須在專案開始前引入徐昂管的jar包。struts.xml中還應注意< result >中type屬性應為json,預設的是dispatcher,進行json資料傳輸時一定得改為json。最後就是< param >的includeProperties屬性。此處是設定傳回前臺的資料型別。哪些可以傳回去,哪些不行,都可以在此處進行設定,類似於過濾的作用
  3. action的編寫,一定要繼承自actionSupport(實現action介面也可以,不過相對要麻煩一些)。然後就是為相關屬性設定setter和getter方法,這一步是必須的,不然接收不到前臺傳來的資料。最後就是在指定的方法中進行相關的業務處理,過程並不複雜。
  4. 外加一個剛遇到的一個問題。當從後臺返回的資料僅有一個字串時,若想從前臺取出該字串,直接呼叫data即可,不用寫成”data.XXX”的形式。寫了反而會報undefined的錯誤。謹記謹記

歡迎對此還有疑問的小夥伴在評論去留言,我有空時會及時解答的(づ。◕‿‿◕。)づ