首页 > 个人作品, 前端技术, 后台技术, 项目 > 实例解析java + jQuery + json工作过程(获取JSON数据)

实例解析java + jQuery + json工作过程(获取JSON数据)

前天刚刚写的一篇关于《实例解析java + ajax(jQuery) + json工作过程(登录)》的文章引起了网友们的关注和好评,

自从本站的账务管理系统(个人版)开源 以后很多网友询问系统的实现方式,我一一解释……,为此今天写文章详细讲解系统功能的实现细节。

以本站的开源项目账务管理系统的“债务人”模块为例子讲解

一、效果预览

债务人详细页面效果预览

债务人详细页面效果预览

二、实现方式

基本思想就是绑定列表中的人员名称触发事件,获得当前人员的ID发送ajax请求到后台,后台根据ID查询详细信息,返回JSON数据结果至前台,前台通过对话框组件显示人员详细

1、绑定click事件到列表的人员名称
在项目中的iouser/js/iouser.js文件中有这样一个方法:

/**
 * 点击名称弹出详细
 */
function regShowDetail() {
        $("span[name=iouid]").unbind('click').bind('click', function(){
                showDetail($(this).parent().parent().find('input[name=chk]').val());
        });
}

通过regShowDetail绑定了点击人员时执行showDetail的事件,

$(this).parent().parent().find('input[name=chk]').val()
//上面这句话就是获得列表左侧的复选框的value值以便传送给后台
  • 下面介绍一下showDetail方法的功能实现:
 * 查看用户详细资料
 * @param {} userId 用户ID
 */
function showDetail(userId) {
        // 创建一个对话框组件
        var dialog = $.weeboxs.open('showDetail.html', {
                title: '正在加载用户信息……',
                contentType: 'ajax',
                width: 600,
                height: 350,
                animate: true,
                clickClose: false,
                type: 'wee',
                showOk: false,
                cancelBtnName: '关 闭',
                onopen: innerShowDetail
        });
 
        //内部函数,实现债务人详细信息的载入、设置值
        function innerShowDetail() {
                // 获得JSON格式的数据
                $.getJSON('load.do',{id : userId}, function(json) {
                        // 根据key设置value
                        for (key in json) {
                                if(key == 'id'){
                                        $('#detailDiv #' + key).val(json[key]);
                                } else {
                                        if(json[key] == ''){
                                                // 没有值设置为空
                                                $('#detailDiv #' + key).html('?');
                                        } else if(key == 'sex'){
                                                $('#detailDiv #' + key).html(json[key] == '0' ? '女' : '男');
                                        } else if(key == 'group'){
                                                if(json[key] != null) {
                                                        $('#detailDiv #' + key).html(json[key]['groupName']);
                                                }
                                        } else {
                                                $('#detailDiv #' + key).html(json[key]);
                                        }
                                }
                        }
 
                        //设置对话框标题和内容
                        $('#detailDiv').removeAttr('class');
                        dialog.setTitle('查看人员[' + json['userName'] + ']详细资料');
                        dialog.setContent($('#detailDiv').html());
                });
        }
}
  • showDetail方法首先打开一个对话框组件 加载一个静态的模板showDetail.html
    • 文件中的ID都是根据信息点命名的,这样便于通过ID设置值
  • 通过路径load.do 请求后台查询人员详细,后台处理类为net.yanhl.iouser.action.IOUserAction的loadUser()方法,代码请点击这里查看
    • 怎么查询一个POJO对象就介绍了,重点说明怎么返回JSON格式的数据
    • 这里还是使用java语言使用的JSON工具json-lib,关于json-lib的资料上篇文章也已介绍,这里不再重复;
      // 获取一个Iouser对象,包含债务人的信息
      Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
       
      //使用json-lib工具把一个POJO对象解析为一个JSON格式数据
      JSONObject jsonObject = JSONObject.fromObject(user, config);
       
      //向前台发送结果集
      print(response, jsonObject.toString());
      

      最中返回的结果集如下:

      {
      “age” : 56,
      “companyAddress” : “32″,
      “companyName” : “未知”,
      “companyPhone” : “–”,
      “companyZip” : “”,
      “createDate” : null,
      “creatorId” : 1,
      “group” : {
      “childSize” : 0,
      “createDate” : {
      “date” : 27,
      “day” : 6,
      “hours” : 0,
      “minutes” : 0,
      “month” : 11,
      “nanos” : 0,
      “seconds” : 0,
      “time” : 1230307200000,
      “timezoneOffset” : -480,
      “year” : 108
      },
      “creatorId” : 1,
      “groupName” : “商务”,
      “id” : 33,
      “orderNum” : 0,
      “remark” : “”
      },
      “homeAddress” : “香港九龙”,
      “homePhone” : “”,
      “homeZip” : “”,
      “id” : 12,
      “mobilePhone” : “15856453456″,
      “orderNum” : 0,
      “remark” : “香港富豪”,
      “sex” : “1″,
      “userName” : “李嘉诚”
      }

  • 前台获得了结果集之后就可以根据key获得value来设置详细页面的内容了,代码如下:
    for (key in json) {
            if(key == 'id'){
                    $('#detailDiv #' + key).val(json[key]);
            } else {
                    $('#detailDiv #' + key).val(json[key]);
            }
    }
    

    至此就是我们刚刚看到的效果了,是不是很简单O(∩_∩)O~

附:

Popularity: 94%

  1. testtesttesttesttesttesttesttest Jul 7th, 2010 @ 20:47 | #1

    testtesttesttsetstetestestsetestetetet

评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks