ajax接收json数据到js解析

今天又学到了一点新知识,脑子记不住东西特把它记录下来!

页面ajax请求后台时一般都是返回字符串进行判断,要是返回list或者对象时该怎么办?

第一种:ajax接收到list并返回给前台

js代码:

[javascript] view plain copy
print ?
  1. function test(obj){  
  2.             var str = $("#tt").val();  
  3.             webTest(str,function(result){  
  4.                 alert(result);//将后台返回结果alert一下  
  5.                 var list = eval(result);//解析json  
  6.                 for(var i = 0;i < list.length;i++){//循环遍历数据  
  7.                     var userinfo = list[i];  
  8.                     alert(userinfo.name+"+"+userinfo.age+"+"+userinfo.sex+"+"+userinfo.address);  
  9.   
  10.                 }  
  11.             });   
  12.         }  
function test(obj){
            var str = $("#tt").val();
            webTest(str,function(result){
                alert(result);//将后台返回结果alert一下
                var list = eval(result);//解析json
                for(var i = 0;i < list.length;i++){//循环遍历数据
                    var userinfo = list[i];
                    alert(userinfo.name+"+"+userinfo.age+"+"+userinfo.sex+"+"+userinfo.address);

                }
            }); 
        }
上面红字webTest方法(这里是调用webservice,和ajax处理流程一样)
[javascript] view plain copy
print ?
  1. var webTest = function (test, callback) {  
  2.     var soapMessage = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bs="http://inter.hs.com/">'  
  3.             + '<soapenv:Header/>'  
  4.             + '<soapenv:Body>'  
  5.             + '<bs:test>'  
  6.             + '<para>' + test + '</para>'  
  7.             + '</bs:test>'  
  8.             + '</soapenv:Body>'  
  9.             + '</soapenv:Envelope>';  
  10.     PostData(soapMessage, callback);  
  11. }  
var webTest = function (test, callback) {
    var soapMessage = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bs="http://inter.hs.com/">'
            + '<soapenv:Header/>'
            + '<soapenv:Body>'
            + '<bs:test>'
            + '<para>' + test + '</para>'
            + '</bs:test>'
            + '</soapenv:Body>'
            + '</soapenv:Envelope>';
    PostData(soapMessage, callback);
}

后台代码:

  1. @Override  
  2.     public String test(String str) {  
  3.         List<UserInfo> list = new ArrayList<UserInfo>();  
  4.         UserInfo ui = new UserInfo();  
  5.         ui.setName("tom");  
  6.         ui.setAge(22);  
  7.         ui.setSex("男");  
  8.         ui.setAddress("陕西西安");  
  9.         list.add(ui);  
  10.         JSONObject ja = JSONObject.fromObject(list);//将list包装成json传递给前台  
  11.         return ja.toString();  
  12.     }  
@Override
    public String test(String str) {
        List<UserInfo> list = new ArrayList<UserInfo>();
        UserInfo ui = new UserInfo();
        ui.setName("tom");
        ui.setAge(22);
        ui.setSex("男");
        ui.setAddress("陕西西安");
        list.add(ui);
        JSONObject ja = JSONObject.fromObject(list);//将list包装成json传递给前台
        return ja.toString();
    }
 运行结果:

第二种情况,接收对象数据返回:

js代码:

[javascript] view plain copy
print ?
  1. <script>  
  2.     $("div.submit_op>input").click(function(){  
  3.         var uname = $("#acount").val();  
  4.         var pass = $("#pass").val();  
  5.         if(uname==""){  
  6.             alert("请输入用户名");  
  7.         }else if(pass == ""){  
  8.             alert("请输入密码");  
  9.         }else{  
  10.             ecLogin(uname,pass,function(result){//这一步可以堪称是ajax请求后台,result是返回结果  
  11.                 if(result == "false"){  
  12.                     alert("用户名或者密码错误");  
  13.                 }else{  
  14.                     var userinfo = eval(result)[0];//当是单个对象时,虽不用循环遍历,但是需要【0】取</span>  
  15.                     alert(userinfo.user_reg_id);  
  16.                 }  
  17.             });  
  18.         }  
  19.   
  20.     })  
  21. </script>  
<script>
    $("div.submit_op>input").click(function(){
        var uname = $("#acount").val();
        var pass = $("#pass").val();
        if(uname==""){
            alert("请输入用户名");
        }else if(pass == ""){
            alert("请输入密码");
        }else{
            ecLogin(uname,pass,function(result){//这一步可以堪称是ajax请求后台,result是返回结果
                if(result == "false"){
                    alert("用户名或者密码错误");
                }else{
                    var userinfo = eval(result)[0];//当是单个对象时,虽不用循环遍历,但是需要【0】取</span>
                    alert(userinfo.user_reg_id);
                }
            });
        }

    })
</script>

[javascript] view plain copy
print ?
  1. /** 
  2.  * 登录接口 
  3.  * @param phone 手机号 
  4.  * @param pass 密码 
  5.  * @param callback func 回调函数,原型function(string) 其中参数为登录之后的用户对象或者null 
  6.  * @returns 
  7.  */  
  8. var ecLogin = function (phone, pass, callback) {  
  9.     alert(phone);  
  10.     var soapMessage = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bs="http://inter.hs.com/">'  
  11.             + '<soapenv:Header/>'  
  12.             + '<soapenv:Body>'  
  13.             + '<bs:login>'  
  14.             + '<phone>' + phone + '</phone>'  
  15.             + '<pass>' + pass + '</pass>'              
  16.             + '</bs:login>'  
  17.             + '</soapenv:Body>'  
  18.             + '</soapenv:Envelope>';  
  19.     PostData(soapMessage, callback);  
  20. }  
/**
 * 登录接口
 * @param phone 手机号
 * @param pass 密码
 * @param callback func 回调函数,原型function(string) 其中参数为登录之后的用户对象或者null
 * @returns
 */
var ecLogin = function (phone, pass, callback) {
    alert(phone);
    var soapMessage = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bs="http://inter.hs.com/">'
            + '<soapenv:Header/>'
            + '<soapenv:Body>'
            + '<bs:login>'
            + '<phone>' + phone + '</phone>'
            + '<pass>' + pass + '</pass>'            
            + '</bs:login>'
            + '</soapenv:Body>'
            + '</soapenv:Envelope>';
    PostData(soapMessage, callback);
}
后台代码:
  1. @Override  
  2. public String login(String strPhone, String password) {  
  3.     String str = "false";  
  4.     Connection conn = DBManager.getConnection();  
  5.     String sql = "select * from tb_user_login where user_phone = ? and user_pwd = ?";  
  6.     PreparedStatement ps = null;  
  7.     ResultSet rs = null;  
  8.     try {  
  9.         ps = conn.prepareStatement(sql);  
  10.         ps.setString(1, strPhone);  
  11.         ps.setString(2, password);  
  12.         rs = ps.executeQuery();  
  13.         while (rs.next()){  
  14.             UserLogin ul = new UserLogin();  
  15.             ul.setUser_reg_id(rs.getString(1));  
  16.             ul.setUser_phone(rs.getString(2));  
  17.             JSONObject ja = JSONObject.fromObject(ul);  
  18.             str = ja.toString();  
  19.         }  
  20.     } catch (SQLException e) {  
  21.         e.printStackTrace();  
  22.     }  
  23.     return str;  
  24. }  
   @Override
    public String login(String strPhone, String password) {
        String str = "false";
        Connection conn = DBManager.getConnection();
        String sql = "select * from tb_user_login where user_phone = ? and user_pwd = ?";
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            ps.setString(1, strPhone);
            ps.setString(2, password);
            rs = ps.executeQuery();
            while (rs.next()){
                UserLogin ul = new UserLogin();
                ul.setUser_reg_id(rs.getString(1));
                ul.setUser_phone(rs.getString(2));
                JSONObject ja = JSONObject.fromObject(ul);
                str = ja.toString();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return str;
    }

如有不对,还请各位大牛指正!

转载于:https://www.cnblogs.com/jpfss/p/9100937.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值