您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Ajax接收JSON数据

2024/3/4 11:47:25发布28次查看
1.   ajax接收json数据json:javascript对象表示法(javascript object notation)。json是一种存储和交换文本信息的语法。因为json比xml更轻量,效率更高,更易解析,所以在ajax中前后台传输数据一般都使用的是json格式。
1.1.json与xml的对比
json
json 是纯文本
json 具有“自我描述性”(人类可读)
json 具有层级结构(值中存在值)
json 可通过 javascript eval()进行解析
json 数据可使用 ajax 进行传输
xml
xml是文档结构,节点复杂
xml可以通过javascript解析,需要循环遍历dom读取节点信息
xml厚重且读取效率低
1.2.json语法
json语法是javascript语法的子集。
json语法的规则:
数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组json数据的书写格式时:名称/值对,即字段名称(在双引号中),后面一个冒号,对应是值,json的值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null。
常见的json语法书写:
<script type="text/javascript">        var json01 = {}; //json的第一种写法:json对象        var json02 = []; //json的第二种写法:json数组        // json对象一般写法        var json03 = {            name:张小三,            age:45,            sex:true        };             // json对象标准格式        var json03_1 = {                              name:张小三,                              age:45,                              sex:true        };             //json数组        var json04 = [{            name:张小三,            age:45,            sex:true        },{            name:李华,            age:20,            sex:false        }        ];              var json05 = [{            name:张小三,            age:45,            sex:true,            department:{                id:1,                name:it部,                employees:[                {name:xxx, age:23},                {name:yyy, age:24}                ]            }        },{            name:李华,            age:20,            sex:false        }        ];</script>
1.3.json文件json 文件的文件类型是 .jsonjson 文本的 mime 类型是 application/json1.4.json使用json最常见的用法之一,是从web服务器上读取json格式的字符串数据,将json数据转化为javascript对象,然后在网页上使用该数据。
转化json格式字符串为json对象的方式有两种:
①使用javascript函数eval()
<script type="text/javascript">        //最标准的json格式:key必须要加双引号        var formatjson = {            name : 黄小邪,            age : 23,            sex : true        };        //①jsonstr转json对象方式一:        //eval:计算javascript字符串,并把它作为脚本代码来执行        //前台接收到的是json字符串格式,拿数据需要把字符串转化成json对象        var jsonstr = '{name : 黄小邪, age : 23, sex : true}';        //注意:使用eval转换jsonstr,必须前后加括号,这里不区分是否标准格式        var jsonobj = eval((+ jsonstr +));        console.debug(jsonobj);</script>
②使用json解析器
eval()函数可以编译并执行任何javascript代码,使用eval()隐藏了一个潜在的安全问题。
使用json解析器将json字符串转换为javascript对象是更安全的做法。
json解析器只能识别json字符串文本,不会编译脚本,相对解析速度更快,具有拿来即用的便捷。
使用json解析器:
①需要导入json转换jsonobj相关jar包;
②转换对象可以是任何json字符串格式的文本,但是必须是标准的json格式:
//②jsonstr转json对象方式二:var jsonstr2 = '{name : 黄小邪, age : 23, sex : true}';//注意:使用json.parse转换jsonstr必须保证jsonstr是标准格式的字符串var jsonobj2 = json.parse(jsonstr2);console.debug(jsonobj2);
1.5.json与ajax实现二级联动实例这里使用json字符串操作并向前台传输json格式的数据来展示json与ajax之间的操作实现。
后台:
虚拟了两个省、市domain并提供加载获取省、市的方法供servlet向前台传输数据:
city.java:
/** * 城市对象 *  */public class city {    private long id;    private string name;    public long getid() {        return id;    }    public void setid(long id) {        this.id = id;    }    public string getname() {        return name;    }    public void setname(string name) {        this.name = name;    }    public city() {    }    public city(long id, string name) {        super();        this.id = id;        this.name = name;    }    /**     * 根据省份id查询省份中的城市!     *      * @return     */    public static list<city> getcitybyprovinceid(long id) {                list<city> citys = new arraylist<city>();                if (id == 1) {            citys = arrays.aslist(                    new city(1l,成都),                    new city(2l,南充),                    new city(3l,绵阳),                    new city(4l,遂林),                    new city(5l,达州),                    new city(6l,德阳),                    new city(7l,乐山)            );        } else if (id == 2) {            citys = arrays.aslist(                    new city(11l,广州),                    new city(12l,佛山),                    new city(13l,东莞)            );        } else if (id == 3) {            citys = arrays.aslist(                    new city(21l,昆明),                    new city(22l,玉溪),                    new city(23l,丽江)            );        }        return citys;    }}
province.java:
public class province {    private long id;    private string name;    public province(long id, string name) {        super();        this.id = id;        this.name = name;    }    public long getid() {        return id;    }    public void setid(long id) {        this.id = id;    }    public string getname() {        return name;    }    public void setname(string name) {        this.name = name;    }    public province() {        super();    }    public static list<province> getallprovince() {        list<province> provinces = new arraylist<province>();        provinces.add(new province(1l, 四川));        provinces.add(new province(2l, 广东));        provinces.add(new province(3l, 云南));        return provinces;    }}
提供一个cityprovinceservlet向ajax提供请求地址:
@webservlet(/loaddata)public class cityprovinceservlet extends httpservlet {    @override    protected void service(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {        string cmd = req.getparameter(cmd);        string id = req.getparameter(id);        req.setcharacterencoding(utf-8);        resp.setcontenttype(text/json;charset=utf-8);        //加载省        if(cmd.equals(province)){            list<province> provincelist = province.getallprovince();            resp.getwriter().print(jsonserializer.tojson(provincelist));            system.out.println(加载省!);        }        //加载市        else {            if(id != null && id != ){                list<city> citylist = city.getcitybyprovinceid(long.parselong(id));                resp.getwriter().print(jsonserializer.tojson(citylist));                system.out.println(加载市!);            }        }    }}
前台对应使用ajax与json来解析传递过来的json格式数据:
<!doctype html><html><head>    <meta charset="utf-8">    <title>省市二级联动</title>    <script type="text/javascript">        function getajax(){            var ajax = null;            if(xmlhttprequest){                ajax = new xmlhttprequest();            }else if(activexobject){                ajax = new activexobject(microsoft xmlhttp);            }            return ajax;        }        function loadprovince() {            var xhr = getajax();            xhr.open(get, /loaddata?cmd=province);            xhr.onreadystatechange = function () {                if(xhr.readystate == 4 && xhr.status == 200){                    //provinces:[{id:1,name:四川},{id:2,name:广东},{id:3,name:云南}]                    var provinces = xhr.responsetext;                    var jsonobjarr = json.parse(provinces);                    //操作dom往省级option进行填充数据                    //首先先创建每个option元素                    //将jsonobj数据填充进option中                    jsonobjarr.foreach(                        function (obj) {                            var option = document.createelement(option);                            option.setattribute(value, obj.id);                            option.innerhtml = obj.name;                            document.getelementbyid(province).appendchild(option);                        }                    );                }            };            xhr.send();        }        loadprovince();        function loadcity() {            //得到id            var id = document.getelementbyid(province).value;            //如果是请选择,对应就不加载            if(id == -1){                document.getelementbyid(city).innerhtml = <option>----请选择----</option>;                return;            }            //每次加载都初始化一次            document.getelementbyid(city).innerhtml = ;            var xhr = getajax();            xhr.open(get, /loaddata?cmd=city&id= + id);            xhr.onreadystatechange = function () {                if(xhr.readystate == 4 && xhr.status == 200){                    //[{id:1,name:成都},{id:2,name:南充},{id:3,name:绵阳},{id:4,name:遂林},{id:5,name:达州},                    // {id:6,name:德阳},{id:7,name:乐山}]                    var cityes = xhr.responsetext;                    var jsonobjarr = json.parse(cityes);                    jsonobjarr.foreach(                        function (obj) {                            var option = document.createelement(option);                            option.setattribute(value, obj.id);                            option.innerhtml = obj.name;                            document.getelementbyid(city).appendchild(option);                        }                    );                    //去除掉----请选择------                    document.getelementbyid(city).options.remove(0);                }            };            xhr.send();        }    </script></head><body>    省级:<select id="province" onchange="loadcity()">        <option value="-1">----请选择----</option>    </select>    市级:<select id="city">        <option>----请选择----</option>    </select></body></html>
实现效果如下:
推荐教程:《js教程》
以上就是ajax接收json数据的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product