Web开发之jQuery框架的使用

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(JavaScript框架)。jQuery设计的宗旨是“write LessDo More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。jquery它的插件机制特别丰富,在开发中可以选择非常多的相关插件,例如,表单校验插件,树型结构。

目录

1、jQuery快速入门

2、jQuery核心函数

3、jQuery选择器

4、jQuery的DOM操作

5、jQuery事件处理

6、jQuery的ajax开发

7、jQuery的ajax开发基于json

8、Ajax跨域问题


我们使用jQuery框架可以更好地实现以下操作:

  1. html文档操作,对于dom相关操作优化
  2. jquery提供更加方便与丰富事件处理
  3. jquery提供简单动画特效
  4. jquery提供ajax交互

jQuery的官网如下:jQuery官网,需要相关资料可以进入下载。

1、jQuery快速入门

首先导入jQuery文件jquery-1.8.3.min.js,并在script种引入jquery-1.8.3.min.js,最后执行相应的操作即可,具体如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            alert("jQuery入门") ;
        })
        $(function () {
            alert("这是页面加载完成执行的,jquery中可以绑定多次") ;
        })
        
    </script>
</head>
<body>

</body>
</html>

注意:源生的js绑定,它只能绑定一次,而jquery允许绑定多次。

2、jQuery核心函数

通过id得到dom对象和jqury对象,以及dom对象和jquey对象的相互转换如下:
 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>

        //得到div的dom对象
        var div = document.getElementById("d") ;
        //得到div的jQuery对象
        var jQueryDiv = $("#d") ;
        //将dom对象转换成jQuery对象
        $(div).html("jQuery对象") ;
        //将jQuery对象转换成dom对象
        jQueryDiv.get(0).innerHTML = "dom对象" ;
        
    </script>
</head>
<body>
<div id ="d"></div>
</body>
</html>

3、jQuery选择器

1)基本选择器

包括根据id查找元素,根据标签名称查找元素,根据class属性查找元素,匹配所有元素,以及将每一个选择器匹配到元素合并后一起返回。其中使用到了jQuery的一些方法,例如:html(),size(),index(),each(),text()等。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //得到id=d1的元素中的内容显示出
            var id1 = $("#d1").html() ;
            var id1_1 = $("#d1").text() ;
            alert(id1 + "  " + id1_1) ;
            //将class=d2元素中的内容后面添加欢迎你
            $(".d2").each(function (i) {
                $(this).html($(this).html() + "欢迎你") ;
            })
            //得到class=d2的元素有几个
            var size =  $(".d2").size() ;
            alert(size)
            //得到id=d1这个div在整个页面上是第几个.
            var x = $("div").index("#d1") ;
            alert(x) ;
            //将所有的class=d2或id=d1元素中的内容设置为java
            $(".d2,#d1").html("java")  ;
        }) ;
        
    </script>
</head>
<body>
<div id ="d1">id属性</div>
<div class="d2">class属性</div>
<div class="d2">class属性...</div>
<div>div属性</div>
</body>
</html>

2)层级选择器

  1. 空格 得到元素下的所有子元素(包含直接子元素与间接子元素)
  2. 大于号>  只获取直接的子元素
  3. 加号+  只获取直接的一个兄弟元素
  4. 波浪线~ 所有的后边的兄弟元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //获取id=d的所有<a>子元素
            var x  = $("#d a").size() ;
            alert(x) ;
            //获取id=d 的直接<a>子元素
            var y = $("#d>a").size() ;
            alert(y) ;
            //获取id=d第一个<p>兄弟元素
            var z = $("#d+p").html() ;
            alert(z)
            //获取id=d的所有<p>兄弟元素
            var u = $("#d~p").html() ;
            alert(u) ;
            //将id=d下的所有子元素<a>的文字颜色设置成红色
            $("#d a").css("color","red") ;
        }) ;

    </script>
</head>
<body>
<div id ="d">
    <a>Java</a>
    <p><a>matlab</a></p>
    <a>go</a>
</div>
<p>python</p>
<p>c++</p>
</body>
</html>

3)基本过滤器

过滤器它是在基本选择器与层次选择器获取到一批元素后,在进行过滤操作,使用过滤选择器基本都是”:”开头,除了属性过滤选择器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //设置表格第一行,显示为红色
            $("tr:first").css("color","red") ;
            //设置除表格第一行外,其余行为蓝色
            $("tr:not(tr:first)").css("color","blue") ;
            $("tr:gt(0)").css("color","blue") ;
            //设置偶数行为黄色,奇数行为红色
            $("tr:even").css("color","yellow") ;
            $("tr:odd").css("color","red") ;
            //设置页面标题颜色为灰色
            $(":header").css("color","gray") ;
        }) ;

    </script>
</head>
<body>
<h1>商品信息</h1>
<table border="1">
    <tr>
        <td>编号</td>
        <td>名称</td>
        <td>价格</td>
        <td>数量</td>
    </tr>
    <tr>
        <td>001</td>
        <td>电脑</td>
        <td>5500</td>
        <td>1000</td>
    </tr>

</table>
</body>
</html>

4)内容过滤器

内容过滤选择器它是根据元素内部文本内容进行选中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //设置含有java的div内容为红色
            $("div:contains('java')").css("color","red") ;
            //设置没有字元素的div内容为:这是空的div
            $("div:empty").html("这是空的div") ;
            //设置包含<a>标签的div颜色为蓝色
            $("div:has('a')").css("color","blue") ;
            //设置所有含有子元素span的字体为黄色
            $("span:parent").css("color","yellow") ;
        })

    </script>
</head>
<body>
<div>java</div>
<div>ios</div>
<div></div>
<div>
    <a>python</a>学习
</div>
<div>
    不学习<a>php</a>
</div>
<div>
    <span>android的市场越来越小了</span>
</div>
</table>
</body>
</html>

5)可见性过滤选择器

可见性过滤选择器它匹配display:none或表单中input hidden这样的元素.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //获取表单中隐藏域的值
            var value = $("input:hidden").val() ;
            alert(value) ;
            //设置表格中所有可见的行元素北京为蓝色
            $("tr:visible").css("background-color","blue") ;
            //获取表格中隐藏行的文本值
             alert($("tr:hidden").text()) ;
             //将因此tr显示
            $("tr:hidden").show() ;
            //将显示的tr隐藏
            $("tr:visible").hide() ;
        })

    </script>
</head>
<body>
<form>
    <input type="text" name="email" /><br/>
    <input type="hidden" name="id"value="10"/>
</form>
<table>
    <tr style="display: none">
        <td>value1</td>
    </tr>
    <tr>
        <td>value2</td>
    </tr>
    <tr>
        <td>value3</td>
    </tr>
</table>
</body>
</html>

6)属性过滤选择器

该过滤器主要根据根据元素的属性来过滤,attr()设置或返回被选元素的属性值。具体如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //设置所有id属性的div,字体是红色
            $("div[id]").css("color","red") ;
            //获取name=username的value值
            alert($("[name='username']").val()) ;
            //设置所有的多选框被选中
            //$("input[type='checkbox']").attr('checked',true) ;
            //设置class属性中含有class的被选中
            $("input[type='checkbox'][class*='class']").attr('checked',true) ;
            //获取class等于class2的多选框的name属性值
            alert($("input[type='checkbox'][class='class2']").attr("name")) ;

        })

    </script>
</head>
<body>
<div id = "d">这是一个div</div>
<form>
    <input type="text" name="username" value="tom" /><br/>
    <input type="checkbox" class="class1" name="food" value="米饭"/>米饭
    <input type="checkbox" class="class2" name="milk" value="牛奶"/>牛奶
    <input type="checkbox" class="class3" name="vegetables" value="蔬菜"/>蔬菜
</form>
<span id = "s">这是一个span</span>

</body>
</html>

7)子元素过滤选择器

根据子元素顺序来获取。nth-child根据序号来选择,序号是从1开始,也可以设置odd even 根据奇偶来设置,也可以通过倍数来设置,first-child 获取第一个,last-child 获取最后一个,only-child 获取只有一个子元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () {
            //设置列表中第2个li字号为30
            $("ul li:nth-child(2)").css("font-size",30) ;
            //设置列表第一行字体的颜色为红色
            $("ul li:first-child").css("color","red") ;
            //设置列表最后一行字体颜色为蓝色
            $("ul li:last-child").css("color","blue") ;
            //获取ul下只有一个li的信息
            alert($("ul li:only-child").html()) ;
        })

    </script>
</head>
<body>
<ul>
    <li>java</li>
    <li>python</li>
    <li>c</li>
    <li>matlab</li>
</ul>
<ul>
    <li>张无忌</li>
    <li>赵敏</li>
    <li>周芷若</li>
    <li>张三丰</li>
</ul>
<ul>
    <li>武松</li>
</ul>
</body>
</html>

8)表单过滤选择器

表单过滤选择器是用于选取表单中的元素,trim()它是去掉字符串左右空格,

常用事件处理,失去焦点事件 blur(function(){}),click(function(){}) 点击事件,submit() 表单提交。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            //当username和password失去焦点后判断录入不能为空
            $(":text,:password").blur(function () {
                //获取数据
                var value = $(this).val();
                if(value.trim() == ""){
                    alert($(this).attr("name") + "不能为空") ;
                }
            }) ;
            //对按钮添加点击事件
            $(":button").click(function () {
                $("form").submit() ;
            })
        })

    </script>
</head>
<body>
<form>
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="button" value="按钮">
</form>
</body>
</html>

9)表单对象属性过滤选择器

checked它是用于radio,checkbox 判断选中,selected它是用于select下拉框选中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
           //点击按钮,打印radio,checkbox,select中选中的值
            $(":button").click(function () {
                alert($(":radio:checked").val()) ;
                $(":checkbox:checked").each(function () {
                    alert($(this).val())
                }) ;
                alert($("select option:selected").val()) ;
            }) ;


        })

    </script>
</head>
<body>
<form>
    性别:<input type="radio" name="sex" value="man">男
    <input type="radio" name="sex" value="woman">女<br/>
    爱好:<input type="checkbox" name="hobby" value="basketball">篮球
    <input type="checkbox" name="hobby" value="football">足球
    <input type="checkbox" name="hobby" value="volleyball">网球<br/>
    城市:<select>
    <option value="">请选择...</option>
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
    <option value="nanjing">南京</option><br/>
</select>
    <input type="button" value="提交" >
</form>
</body>
</html>

4、jQuery的DOM操作

1)插入操作

主要分为内部插入和外部插入两种,具体如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            //内部插入
            //在select开始选项前添加一项
           // $("#city").prepend("<option value='shenzhen'>深圳</option>") ;
            //在select选项最后一项添加一个
            //$("#city").append("<option value='guangzhou'>广州</option>") ;
            //外部插入
            $("#city option:first").before($("<option value='shenzhen'>深圳</option>"))  ;
            //$("#city option:last").after($("<option value='guangzhou'>广州</option>"))  ;
            $("<option value='guangzhou'>广州</option>").insertAfter($("#city option:last")) ;
        })

    </script>
</head>
<body>
<form>
    城市:<select id = "city">
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
    <option value="nanjing">南京</option><br/>
</select>
    <input type="button" value="提交" >
</form>
</body>
</html>

2)删除操作

remove和detach都是删除元素,remove连注册事件也删除,detach是不删除注册事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
           //$("#d1").empty() ; //将元素的所有子元素删除
            //给p注册事件
            $("#d1 p").click(function () {
                alert("ppppppppp") ;
            }) ;
            //remove和detach都是删除元素,remove连注册事件也删除,detach是不删除注册事件
            $("#d1 p").remove() ;
            $("#d1 p").detach() ;
            //在d2中的div追加标签p
            $("#d2").append(p) ;
        })

    </script>
</head>
<body>
<div id="d1">
    <p>pppppp</p>
    <span>sssss</span>
    <div id="d2"></div>
</div>
</body>
</html>

3)综合练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            $(":button").click(function () {
                //创建一个tr
                var tr = $("<tr></tr>") ;
                //创建四个td,并向其中添加内容
                var td1 = $("<td></td>") ;
                td1.append($("#username").val()) ;
                var td2 = $("<td></td>") ;
                td2.append($("#phone").val());
                var td3 = $("<td></td>") ;
                td3.append($("#email").val()) ;
                var td4 = $("<td></td>") ;
                //创建一个链接
                var a = $("<a href ='javascript:void(0)'>删除</a>") ;
                td4.append(a) ;
                //完成删除功能
                a.click(function () {
                    $(this).parents("tr").remove() ;
                })
                //td放到tr中
                tr.append(td1).append(td2).append(td3).append(td4) ;
                //tr放到table中
                $("#tab").append(tr) ;
            }) ;
        })

    </script>
</head>
<body>
<div align="center">
<table id="tab" border="1">
    <tr>
        <td>姓名</td>
        <td>电话</td>
        <td>邮箱</td>
        <td>删除</td>
    </tr>
</table>
    <hr>
    姓名:<input type="text" id="username"/>
    电话:<input type="text" id="phone"/>
    邮箱:<input type="text" id="email"/>
    <input type="button" value="添加"/>
</div>
</body>
</html>

5、jQuery事件处理

1)jQuery事件

Jquery中的事件与传统的javascript中事件区别:Jquery中事件允许绑定多个函数,而javascript中一个事件只能绑定一个函数.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        //传统的js方式只能绑定单个事件
        window.onload = function(){
            document.getElementById("btn3").onclick = function () {
                alert("btn3") ;
            };
        } ;
        $(function () { //页面加载完成后执行
            //jQuery可以同时绑定多个事件
            $("#btn1").click(function () {
                alert("btn1") ;
            }) ;
            $("#btn2").click(function () {
                alert("btn2") ;
            }) ;

        })

    </script>
</head>
<body>

<input type="button" id="btn1" value="添加"/>
<input type="button" id="btn2" value="删除"/>
<input type="button" id="btn3" value="重置"/>

</body>
</html>

2)传统的JS事件绑定与jQuery事件绑定

bind只能 为存在的元素进行事件绑定,而live可以为没有存在,后续通过代码新添加的元素进行事件绑定。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        //传统的js方式只能绑定单个事件
        window.onload = function(){
            document.getElementById("btn3").onclick = function () {
                alert("btn3") ;
            };
        } ;

        $(function () { //页面加载完成后执行
            //jQuery的简化的绑定事件方法
            $("#btn1").click(function () {
                alert("btn1") ;
            }) ;
            //bind用于绑定事件
            $("#btn2").bind("click",function(){
                alert("btn2") ;
            }) ;
            //unbind用于解绑
            $("#btn2").unbind("click") ;
            //使用live进行事件绑定
            $("#btn2").live("click",function () {
                alert("btn2") ;
            }) ;
            //使用die进行解绑
            $("#btn2").die("click") ;

        })

    </script>
</head>
<body>

<input type="button" id="btn1" value="添加"/>
<input type="button" id="btn2" value="删除"/>
<input type="button" id="btn3" value="重置"/>
<input type="button" id="btn4" value="选择" onclick="fun1()">
<script>
    function fun1() {
        alert("btn4") ;
    }
</script>
</body>
</html>

3)一次性事件和自动触发

one()是一次性触发,trigger()在每一个匹配的元素上触发某类事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            //一次性事件
            $("#btn1").one("click",function () {
                alert("btn1")  ;
            }) ;
            //给按钮注册一个mouseover事件
            $("#btn1").bind("mouseover",function () {
                $(this).trigger("click") ;
            }) ;
        })

    </script>
</head>
<body>

<input type="button" id="btn1" value="添加"/>
<input type="button" id="btn2" value="删除"/>
<input type="button" id="btn3" value="重置"/>
<input type="button" id="btn4" value="选择" onclick="fun1()">
<script>
    function fun1() {
        alert("btn4") ;
    }
</script>
</body>
</html>

4)事件切换

hover这个操作它可以绑定两个函数,当触发mouseover时第一个函数执行,当触发mouseout时第二个函数执行。toggle用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            //先设置div隐藏
            $("div").hide() ;
            //给h1添加hover操作
            $("h1").hover(function () {
                //鼠标移入显示
                $("div").fadeIn(2000) ;
            },function () {
                //鼠标移出隐藏
                $("div").fadeOut(2000) ;
            }) ;
        })

    </script>
</head>
<body>
<h1>这是测试</h1>
<div>这是一个div</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="WEB-INF/lib/jquery-1.8.3.min.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            //通过点击轮流显示三张照片
            $("img").toggle(function () {
                $(this).attr("src","2.png") ;
            },function () {
                $(this).attr("src","3.png") ;
            },function () {
                $(this).attr("src","1.png") ;
            }) ;
        })

    </script>
</head>
<body>
<img src="1.png" width="131" height="40">
</body>
</html>

6、jQuery的ajax开发

ajax是异步js和xml,一种创建交互式网页应用的网页开发技术,可以实现网页异步数据的更新,即不重新加载整个网页的情况下,对网页部分内容进行更新。

1.$.ajax()它是jquery提供的最基本的ajax编程方式。它的功能比较强大,但是使用比较麻烦,一般不使用,它是将远程数据加载到XMLHttpRequest对象中。

2.load  get  post 它们简化了$.ajax操作,get post针对get与post请求的,它们是开发中使用的比较多。

3.getScript  getJSON 它们是用于解决ajax跨域问题的。

1)$.ajax介绍

使用$.ajax完成向服务器发送请求,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="jquery-1.8.3.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            $("#username").blur(function () {
                //向服务器发送请求
                var usernameValue = $("#username").val() ;
                var url = "/servlet_war_exploded/LoadServlet" ;
                //使用$.ajax完成操作
                $.ajax({
                    url:url,
                    data:{'username':usernameValue},
                    type:"post",
                    dataType:"html",
                    success:function (data) { //参数data接收了服务器响应的数据
                        $("#username_span").html(data) ;
                    }
            }) ;
            });
        })

    </script>
</head>
<body>
<input type="text" name="username" id="username"> <span id = "username_span"></span><br/>
<input type="password" name = "password"><br/>
</body>
</html>

2)$.get与$.post介绍

$.get与$.post它们针对于get与post请求,向服务器发送请求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery案例</title>
    <script type="text/javascript" src="jquery-1.8.3.js"></script>
    <script>
        $(function () { //页面加载完成后执行
            $("#username").blur(function () {
                //向服务器发送请求
                var usernameValue = $("#username").val() ;
                var url = "/servlet_war_exploded/LoadServlet" ;
                //使用$.get完成操作
                $.get(url,{"username":usernameValue},function (data) {
                    $("#username_span").html(data) ;
                },"html") ;
                //使用$.post完成操作只需要把get换成post

            });
        })

    </script>
</head>
<body>
<input type="text" name="username" id="username"> <span id = "username_span"></span><br/>
<input type="password" name = "password"><br/>
</body>
</html>

7、jQuery的ajax开发基于json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,json简单说就是javascript中的对象和数组.Fastjson是阿里提供的一个开源json插件,它可以将java的对象转换成json数据,也可以将一个json转换成java对象(不常用).

Fastjson使用介绍

  1. 导入相应的jar包
  2. fastjson将java对象转换成json数据,String  json=JSONObject.toJsonString(java对象);

1)将java对象和list集合转换为json

 首先创建一个java的实体类。

public class Project {
    private int id ;
    private String name ;
    private int count ;
    private double price ;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

写一个测试类,使用Fastjson将java对象和list集合转换为json,如下:

import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class JsonTest {
    public static void main(String[] args) {
        test() ;
        test1() ;
    }

    private static void test1() {
        //将一个list集合转换成json
        List<Project> list = new ArrayList<Project>() ;
        Project project1 = new Project() ;
        project1.setId(1);
        project1.setCount(100);
        project1.setName("电视机") ;
        project1.setPrice(2000.00);
        Project project2 = new Project() ;
        project2.setId(2);
        project2.setCount(200);
        project2.setName("洗衣机机") ;
        project2.setPrice(3000.00);
        list.add(project1) ;
        list.add(project2) ;
        String json = JSONObject.toJSONString(list) ;
        System.out.println(json);
    }

    private static void test() {
        Project project = new Project() ;
        project.setId(1);
        project.setCount(100);
        project.setName("电视机") ;
        project.setPrice(2000.00);
        //将一个java对象转换成json
        String json = JSONObject.toJSONString(project) ;
        System.out.println(json);

    }
}

2)案例1-显示商品信息

  1. 创建一个html页面,页面上有一个”显示商品”连接
  2. 当我们点击页面上的连接时,向服务器发送ajax请求,获取商品信息.
  3. 服务器得到商品信息List<Product>,将集合信息转换成json响应到浏览器端。
  4. 在页面上来处理服务器响应回来的数据。

页面处理ajax向服务器发送的请求,以及将json数据封装成表格响应到浏览器如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示商品信息</title>
    <script type="text/javascript" src="jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#a").toggle(function () {
                //向服务器发送请求得到商品信息并显示
                var url = "/servlet_war_exploded/ProductServlet" ;
                $.post(url,function (data) {
                   var ObjectJson = eval(data) ;
                   //处理响应的json数据,封装成table的html代码
                    var tab = $("<table border='1'><tr><td>编号</td><td>名称</td><td>数量</td><td>价格</td></tr></table>") ;
                    for(var i=0; i<ObjectJson.length; i++){
                        var tr = $("<tr><td>"+ObjectJson[i].id+"</td><td>"+ObjectJson[i].name+"</td><td>"+ObjectJson[i].count+"</td><td>"+ObjectJson[i].price+"</td></tr>") ;
                        tab.append(tr) ;
                    }
                    $("#content").append(tab) ;
                    $("#content").show() ;
                    },"json") ;
            },function () {
                //将商品信息进行隐藏
                $("#content").hide() ;
                //清空div
                $("#content").html("") ;
            })
        })
    </script>
</head>
<body>
<a href="javascript:void(0)" id="a">显示商品信息</a>
<hr>
<div id="content">
</div>
</body>
</html>

定义的一个实体Product类,用于封装数据:

public class Product {
    private int id ;
    private String name ;
    private int count ;
    private double price ;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

处理页面请求并相应json数据的servlet,如下:

import com.alibaba.fastjson.JSONObject;
import com.domain.Product;
import com.domain.Project;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ProductServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        List<Product> list = new ArrayList<Product>() ;
        Product p1 = new Product() ;
        p1.setId(1);
        p1.setCount(100);
        p1.setName("电视机") ;
        p1.setPrice(2000.00);
        Product p2 = new Product() ;
        p2.setId(2);
        p2.setCount(200);
        p2.setName("洗衣机机") ;
        p2.setPrice(3000.00);
        list.add(p1) ;
        list.add(p2) ;
        //将数据转换成json响应到浏览器
        String json = JSONObject.toJSONString(list) ;
        response.getWriter().write(json);

    }
}

最后需要在web.xml中配置用到的servlet,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>ProductServlet</servlet-name>
        <servlet-class>com.controller.ProductServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ProductServlet</servlet-name>
        <url-pattern>/ProductServlet</url-pattern>
    </servlet-mapping>


</web-app>

3)案例2-省二级联动

  1. 会向服务器发送两次请求,第一次是页面加载完成后,获取省份信息,选择省份后,向服务器发送请求来获取相关的城市信息。
  2. 省份与城市信息,Province对应省份信息类,City对应城市信息类,我们自定义相关的信息Map<Province,List<City>>用来存储省份与城市信息。

1.完成服务器端操作

a.创建Province与City类

b.创建Map集合来封装数据

c.创建一个Servlet来处理浏览器端的请求。

 2.关于浏览器端操作

a.页面加载完成后,要向服务器发送请求,来获取省份信息,添加到省份下拉框中。

b.当选择某一个省份后,chang事件触发,根据选择的省份,向服务器发送请求来获取对应的城市信息添加到城市的下拉框中。

服务器端的实体类City代码如下:

public class City {
    private int id ;
    private String name ;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

服务器端实体类Province代码:

public class Province {
    private int id ;
    private String name ;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

服务器端的servlet代码,用于封装数据和响应请求,如下:


import com.alibaba.fastjson.JSONObject;
import com.domain.City;
import com.domain.Product;
import com.domain.Province;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;

@WebServlet(name = "CityServlet")
public class CityServlet extends HttpServlet {
    Map<Province, List<City>> map = new HashMap<>() ;
    @Override
    public void init() throws ServletException {

        //创建省份
        Province p1 = new Province() ;
        p1.setId(1);
        p1.setName("黑龙江");
        City c11 = new City() ;
        c11.setId(1);
        c11.setName("哈尔滨");
        City c12 = new City() ;
        c12.setId(2);
        c12.setName("大庆");
        List<City> l1 = new ArrayList<City>() ;
        l1.add(c11) ;
        l1.add(c12) ;
        map.put(p1,l1) ;


        Province p2 = new Province() ;
        p2.setId(2);
        p2.setName("吉林");
        City c21 = new City() ;
        c21.setId(1);
        c21.setName("长春");
        City c22 = new City() ;
        c22.setId(2);
        c22.setName("四平");
        List<City> l2 = new ArrayList<City>() ;
        l2.add(c21) ;
        l2.add(c22) ;
        map.put(p2,l2) ;


        Province p3 = new Province() ;
        p3.setId(3);
        p3.setName("辽宁");
        City c31 = new City() ;
        c31.setId(1);
        c31.setName("沈阳");
        City c32 = new City() ;
        c32.setId(2);
        c32.setName("大连");
        List<City> l3 = new ArrayList<City>() ;
        l3.add(c31) ;
        l3.add(c32) ;
        map.put(p3,l3) ;

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String method = request.getParameter("method") ;
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        if(method.equals("pro")){
            //获取所有的省份信息,将省份信息封装到集合,转换成json数据,响应到浏览器
            Set<Province> set = map.keySet() ;
            String json = JSONObject.toJSONString(set) ;
            response.getWriter().write(json);
        }
        if(method.equals("city")){
            //获取省份名称
            String pname = request.getParameter("pname") ;
            //遍历省份,根据省份获取对应的城市集合
            for(Province p : map.keySet()){
                if(pname.equals(p.getName())) {
                    List<City> city1 = map.get(p);
                    //转换成json数据响应到浏览器
                    String json1 = JSONObject.toJSONString(city1) ;
                    response.getWriter().write(json1);
                    break ;
                }
            }
        }
    }
}

浏览器端发送请求,并根据响应显示的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>省市二级联动</title>
    <script type="text/javascript" src="jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function () {
            //当页面加载完成,向服务器发送请求并获得省份信息
            var url = "/servlet_war_exploded/city" ;
            $.post(url+"?method=pro",function (data) {
                var objJson = eval(data) ;
                for(var i=0; i<objJson.length; i++){
                    //省份名称
                    var name = objJson[i].name ;
                    //生成省份的option添加到省份下拉列表
                    $("#province").append("<option>"+name+"</option>") ;
                }
            },"json");
            //当选择了省份,获取省份对应的城市信息
            $("#province").change(function () {
                //先清理之前的
                $("#city").html("<option>---选择城市---</option>") ;
                //获取省份对应的城市信息并显示在浏览器
                var pname = $(this).val() ;
                $.post(url+"?method=city",{"pname":pname},function (data) {
                    var jsons = eval(data) ;
                    //alert(jsons.length) ;
                    //  for(var i=0; i<jsons.length; i++){
                    //      $("#city").append("<option>"+jsons[i].name+"</option>") ;
                    //  }
                    $(jsons).each(function () {
                        var name = this.name ;
                        $("#city").append("<option>"+name+"</option>") ;
                    }) ;
                },"json") ;

            });
        });
    </script>
</head>
<body>
<select id="province">
    <option>---请选择省份---</option>
</select>
<select id="city">
    <option>---请选择城市---</option>
</select>
</body>
</html>

配置servlet的xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>CityServlet</servlet-name>
        <servlet-class>com.controller.CityServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CityServlet</servlet-name>
        <url-pattern>/city</url-pattern>
    </servlet-mapping>


</web-app>

8、Ajax跨域问题

跨域它是不同的域名(服务器)之间的相互的资源的访问。当协议,域名,端口号任意一个不相同,它们就是不同的域。正常情况下,因为浏览器安全问题,不同域的资源是不可以访问的。

什么情况下会使用到跨域?

一般情况是在自己的内部的工程中会出现跨域情况。

有三种解决方案:

1.代理方案 前端页面访问本地的服务器,本地服务器访问其它域的资源,它是服务器端的跨域问题解决。
2.jsonp JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

3.XHR2全称XMLHttpRequest Level2它是HTML5提供的方法,一般是在移动开发中使用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值