jQuery 学习总结

本文详细介绍了jQuery的基础知识,包括jQuery的概念、思维导图、语法、选择器、过滤器、函数的使用,特别是`each()`函数和事件处理。此外,还探讨了jQuery的Ajax功能,如`.get()`和`.post()`方法,以及如何优化级联项目。通过实例代码,帮助读者掌握jQuery的核心功能。

jQuery

jQuery的概念

  • jQuery是什么?
    • jQuery是js库
    • 在库中封装了很多方法可供开发人员调用
  • dom对象和jquery对象
    • dom对象,使用javascript的语法创建的对象叫做dom对象, 也就是js对象。
    • var obj = document.getElementById(“txt1”); obj是dom对象,也叫做js对象。
  • jquery对象是什么?
    • 使用jquery语法表示对象叫做jquery对象, 注意:jquery表示的对象都是数组。
    • jquery对象是由n个dom对象组成的一个数组对象。
    • 例如 var jobj = $(“#txt1”) , jobj就是使用jquery语法表示的对象。也就是jquery对象。 它是一个数组。现在数组中就一个值。因为使用的是id选择器,id在dom中是唯一的。

jQuery的思维导图

在这里插入图片描述

jQuery的语法

  • dom对象可以和jquery对象相互的转换。

    • dom对象可以转为jquery , 语法: $(dom对象)

      • <html>
        	<head>
        		<meta charset="utf-8">
        		<title>dom对象转为jQuery对象</title>
                <!--引入jquery库,可到官网下载js文件-->
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			// dom对象转为jQuery对象
        			function toJquery(){
        				var btn = document.getElementById("btn");
        				alert("dom:" + btn.value);
        				var $btn = $(btn);
        				alert("jquery:" + $btn.val());
        			}
        			// jQuery转为dom对象 注意jquery是一个数组
        			function toDom(){
        				var $btn = $("#btn1");
        				// var btn = $btn[0];
        				var btn = $btn.get(0); // 第二种方式
        				alert(btn.value);
        			}
        		</script>
        	</head>
        	<body>
        		<input type="button" value="dom转为jquery" id="btn" onclick="toJquery()" />
        		<input type="button" value="jquery转为dom" id="btn1" onclick="toDom()" /></body>
        </html>
        
        
    • jquery对象也可以转为dom对象, 语法: 从数组中获取第一个对象, 第一个对象就是dom对象, 使用[0]或者get{0).

      • <html>
        	<head>
        		<title>jQuery转为dom</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			function sum(){
        				var $text = $("#text"); // 获取jquery对象
        				var text = $text.get(0); // 把jquery对象转为dom对象
        				var num = text.value; // 调用dom的属性value
        				text.value =  num * num; // 进行平方输出
        			}			
        		</script>
        	</head>
        	<body>
        		<input type="button" value="计算平方" onclick="sum()" />
        		<input type="text" id="text" />
        	</body>
        </html>
        
    • 无论从数组中获取哪一个数组,下标是什么,获取的也都会是dom对象,因为jquery就是数组,数组中存放的就是dom对象。

  • 为什么要进行dom和jquery的转换

    • 目的是要使用对象的方法,或者方法。
    • 当你是dom对象时,可以使用dom对象的属性或者方法, 如果你要想使用jquery提供的函数,必须是jquery对象才可以。

选择器

  • 什么是选择器?

    • 就是一个字符串, 用来定位dom对象的。定位了dom对象,就可以通过jquery的函数操作dom
    • 可分为基本选择器和表单选择器
  • 基本选择器(常用选择器)

    • id选择器, 语法: $(“#dom对象的id值”)

      • 通过dom对象的id定位dom对象的。 通过id找对象, id在当前页面中是唯一值。
    • class选择器, 语法: $(".class样式名)

      • class表示css中的样式, 使用样式的名称定位dom对象的。
    • 标签选择器, 语法: $(“标签名称”)

      • 使用标签名称定位dom对象的
    • 代码:

      • <html>
        	<head>
        		<meta charset="utf-8">
        		<title>选择器的使用</title>
        		<style type="text/css">
        			div{
        				background: gray;
        				width: 200px;
        				height: 200px;
        			}
        		</style>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			/*
        				语法:
        					id选择器:$("#id")
        					类选择器:$(".class名")
        					标签选择器:$("标签名")
        			*/
        			// ID选择器
        			function show1(){
        				var div = $("#div1"); // 获取jquery对象
        				div.css("background", "blue"); // 使用jquery的方法进行设置背景颜色
        			}
        			// 类选择器
        			function show2(){
        				var div = $(".div2");
        				div.css("background", "red");
        			}
        			// 标签选择器
        			function show3(){
        				var div = $("div");
        				div.css("background", "black");
        			}
        			// 所有选择器-->整个页面变粉色
        			function show4(){
        				var div = $("*");
        				div.css("background", "pink");
        			}
        			// 混合选择器 --> 使用","隔开
        			function show5(){
        				var div = $(".div2, span");
        				div.css("background", "orange");
        			}
        		</script>
        	</head>
        	<body>
        		<div id="div1"></div>
        		<br />
        		<div class="div2"></div>
        		<br />
        		<div></div>
        		<br />
        		<span id="span1">span标签</span>
        		<br />
        		<input type="button" value="id选择器"  onclick="show1()"/><br />
        		<input type="button" value="class选择器"  onclick="show2()"/><br />
        		<input type="button" value="标签选择器"  onclick="show3()"/><br />
        		<input type="button" value="所有选择器"  onclick="show4()"/><br />
        		<input type="button" value="混合选择器"  onclick="show5()"/><br />
        	</body>
        </html>
        
  • 表单选择器

    • 使用标签的type属性值,定位dom对象的方式。

    • 语法: $(“:type属性值”)

    • 例如: (":text"),选择的是所有的单行文本框,(":text") ,选择的是所有的单行文本框,(":text"),(“:button”) ,选择的是所有的按钮。

    • 代码:

      • <!DOCTYPE html>
        <html>
        	<head>
        		<meta charset="utf-8">
        		<title>表单选择器的使用</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			/*
        				语法:
        					$(":type属性值")
        				作用:主要是处理表单的
        					注意:不是只能处理表单,当没有表单的时候也可以使用此方法。
        			*/
        		   function fun1(){
        			   var s = $(":text");
        			   alert(s.val());
        		   }
        		   
        		   function fun2(){
        			   var s = $(":button");
        			   alert(s.val());
        		   }
        		   
        		   function fun3(){
        			   var s = $(":checkbox");
        			   for (var i = 0; i < s.length; i++) {
        					var f = s[i]; // 把jQuery转为dom对象
        					alert(f.value);
        				}
        		   }
        		
        		   function fun4(){
        			   var s = $(":radio");
        			   for (var i = 0; i < s.length; i++) {
        					var f = s[i];
        					alert(f.value);
        			   }
        			 
        		   } 
        		</script>
        	</head>
        	<body>
        		文本框(text):<input type="text"  /><br />
        		<input type="button" value="按钮(button)" /><br />
        		爱好:
        		<input type="checkbox" value="smoke" name="aihao"/>抽烟
        		<input type="checkbox" value="drink" name="aihao"/>喝酒
        		<input type="checkbox" value="fire" name="aihao"/>烫头<br />
        		性别:
        		<input type="radio" value="man" name="sex"/><input type="radio" value="women" name="sex" /><br />
        		<p>功能</p>
        		<input type="button" value="获取文本框value" onclick="fun1()" /><br>
        		<input type="button" value="获取按钮value" onclick="fun2()" /><br>
        		<input type="button" value="获取多选框value" onclick="fun3()" /><br>
        		<input type="button" value="获取单选框value" onclick="fun4()" /><br>
        	</body>
        </html>
        

过滤器

  • 什么是过滤器

    • 在定位了dom对象后,根据一些条件筛选dom对象。
    • 过滤器也是一个字符串,用来筛选dom对象的。
    • 过滤器不能单独使用, 必须和选择器一起使用。
  • 基本过滤器

    • $(“选择器:first”) : 第一个dom对象

    • $(“选择器:last”): 数组中的最后一个dom对象

    • $(“选择器:eq(数组的下标)”) :获取指定下标的dom对象

    • $(“选择器:lt(下标)”) : 获取小于下标的所有dom对象

    • $(“选择器:gt(下标)”) : 获取大于下标的所有dom对象

    • 代码:

      • <html>
        	<head>
        		<title>过滤器的使用</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			/*
        				语法:
        					$("选择器:条件")
        				作用:过滤器就是过滤条件,对已经定位到数组中 DOM 对象进行过滤筛选,过滤条件不能独立出现在 jquery 函数,如果使用只能出现在选择器后方。	
        			*/
        			// 当页面加载完成时执行函数function(){} 等同于$(document).ready(function(){}) 也就是js中的onload事件
        			$(function(){
        				/*
        					$(选择器).click(function(){});
        						解释:
        							$(选择器):把dom对象转为jquery对象
        							.click:是jquery函数,也是一个事件,点击事件,等用于js中的onclick句柄
        							function(){}:发生点击事件时执行该函数
        					js语法:
        						document.getElementById("id").onclick = function(){}
        				*/
        				$("#btn1").click(function(){
        					var obj = $("div:first");
        					obj.css("background", "red");
        				});
        
        				$("#btn2").click(function(){
        					var obj = $("div:last");
        					obj.css("background", "pink");
        				});
        
        				$("#btn3").click(function(){
        					var obj = $("div:eq(3)");
        					obj.css("background", "black");
        				});
        
        				$("#btn4").click(function(){
        					var obj = $("div:lt(3)");
        					obj.css("background", "blue");
        				});
        
        				$("#btn5").click(function(){
        					var obj = $("div:gt(3)");
        					obj.css("background", "yellow");
        				});
        			})
        		</script>
        		<style type="text/css">
        			div{
        				background:gray;
        			}
        		</style>
        	</head>
        	<body>
        		<div id="one">我是div-0</div>
        		<div id="two">我是div-1</div>
        		<div>
        			我是第三个div-2
        			<div class="son">我是div-3</div>
        			<div class="son">我是div-4</div>
        		</div>
        		<div>我是div-5</div>
        		<br>
        		<span>我是span</span>
        		<br>
        		<p>功能按钮</p>
        		<input type="button" id="btn1" value="选择第一个div" /><br>
        		<input type="button" id="btn2" value="选择最后一个div" /><br>
        		<input type="button" id="btn3" value="获取下标为3的div" /><br>
        		<input type="button" id="btn4" value="获取下标小于3的所有div" /><br>
        		<input type="button" id="btn5" value="获取下标大于3的所有div" /><br>
        	</body>
        </html>
        
  • 表单过滤器

    • 语法:

      • $(“:type属性值:过滤语句”)

      • 例:

        • $(“:text:enabled”):选择可用的文本框
        • $(“:text:disabled”):选择不可用的文本框
        • $(“:checkbox:checked”):复选框中选中的元素
        • $(“#id>option:selected”):选择指定下拉列表被选中元素
      • 代码:

        • <html>
          	<head>
          		<meta charset="ANSI">
          		<title>表单过滤器Filter的使用</title>
          		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
          		<script type="text/javascript">
          		   // 当页面的dom节点加载完毕时执行
          		   $(function(){
          				// 绑定点击事件->把可用文本框的值设为hello
          				$("#btn1").click(function(){
          					var obj = $(":text:enabled");
          					obj.val("hello");
          				});
          				
          				// 绑定点击事件->显示被选中的复选框的值
          				$("#btn2").click(function(){
          					var obj = $(":checkbox:checked");
          					for(var i = 0; i < obj.length; i++){
          						var c = obj[i];
          						alert(c.value);
          					}
          				});
          
          				// 绑定点击事件->显示下拉列表选中的值
          				$("#btn3").click(function(){
          					/*
          						$("#lang>option:selected")
          						解释:
          							$("#id>option:selected")
          							选择指定下拉列表被选中元素
          							">":右边是左边的儿子
          							"selected":表示提取被选中的
          						注意:右边和左边都是选择器	可以用标签选择器也可以用id、类选择器
          						
          					*/
          					var obj = $("#lang>.k:selected"); // 这里使用的是id、类选择器
          					alert(obj.val());
          				});
          		   });
          		</script>
          	</head>
          	<body>
          		<p>文本框</p>
          		<input type="text" value="text1" id="text1" /><br>
          		<input type="text" value="text2" id="text2" disabled="true" /><br>
          		<input type="text" value="text3" id="text3" /><br>
          		<input type="text" value="text4" id="text4" disabled /><br>
          		<p>复选框</p>
          		<input type="checkbox" value="smoke" />抽烟<br>
          		<input type="checkbox" value="drink" checked />喝酒<br>
          		<input type="checkbox" value="fire" checked />烫头<br>
          		<br>
          		<p>下拉框</p>
          		<select id="lang">
          			<option value="java" class="k">java语言</option>
          			<option value="go" class="k" selected >go语言</option>
          			<option value="sql"class="k" >sql语言</option>
          		</select>
          		<p>功能按钮</p>
          		<input id="btn1" type="button" value="所有可用的text设置值为hello" /><br>
          		<button id="btn2">显示被选中的复选框的值</button><br>
          		<button id="btn3">显示下拉列表选中的值</button><br>
          	</body>
          </html>
          

函数

  • 第一组函数(常用函数)

    • val()

      • 操作数组中 DOM 对象的 value 属性.
      • $(选择器).val() :无参数调用形式, 读取数组中第一个 DOM 对象的 value 属性值
      • $(选择器).val(值):有参形式调用;对数组中所有 DOM 对象的 value 属性值进行统一赋值
    • text()

      • 操作数组中所有 DOM 对象的【文字显示内容属性】
      • $(选择器).text():无参数调用,读取数组中所有 DOM 对象的文字显示内容,将得到内容拼接为一个字符串返回
      • $(选择器).text(值):有参数方式,对数组中所有 DOM 对象的文字显示内容进行统一赋值
    • attr()

      • 对 val, text 之外的其他属性操作
      • $(选择器).attr(“属性名”): 获取 DOM 数组第一个对象的属性值
      • $(选择器).attr(“属性名”,“值”): 对数组中所有 DOM 对象的属性设为新值
    • 代码:

      • <!DOCTYPE html>
        <html>
        	<head>
        		<title>函数的使用</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			// 当页面所有dom节点加载完毕时执行function函数
        			$(function(){
        				// 获取第一个文本框的值
        				$("#btn1").click(function(){
        					alert($(":text:first").val());
        					// alert($(":text").val());
        				});
        
        				// 设置所有文本为新值
        				$("#btn2").click(function(){
        					$(":text").val("新值");
        				});
        
        				// 获取div的所有文本
        				$("#btn3").click(function(){
        					alert($("div").text());
        				});
        
        				// 获取第一个div的文本
        				$("#btn4").click(function(){
        					alert($("div:first").text());
        				});
        
        				// 设置所有div新文本
        				$("#btn5").click(function(){
        					$("div").text("div新文本");
        				});
        
        				// 设置img图片
        				$("#btn6").click(function(){
        					$("#img1").attr("src", "img/ex3.jpg");
        					$("#img2").attr("src", "img/ex4.jpg");
        				});
        
        				// 获取img1的src属性值
        				$("#btn7").click(function(){
        					alert($("#img1").attr("src"));
        				});
        			});
        		</script>
        		<style type="text/css">
        			div{
        				background:pink;
        			}
        		</style>
        	</head>
        	<body>
        		<p>文本框val</p>
        		<input type="text" value="张三" /><br>
        		<input type="text" value="李四" /><br>
        		<input type="text" value="王五" /><br>
        		<p>文本数据text</p>
        		<div>我是第一个div</div>
        		<div>我是第二个div</div>
        		<div>我是第三个div</div>
        		<p>图片</p>
        		<img id="img1" src="img/ex1.jpg" /><br>
        		<img id="img2" src="img/ex2.jpg" /><br>
        		<p>功能按钮</p>
        		<input id="btn1" type="button" value="获取第一个文本框的值" /><br>
        		<button id="btn2">设置所有文本为新值</button><br>
        		<button id="btn3">获取div的所有文本</button><br>
        		<button id="btn4">获取第一个div的文本</button><br>
        		<button id="btn5">设置div新文本</button><br>
        		<button id="btn6">设置img图片</button><br>
        		<button id="btn7">获取img1的src属性值</button><br>
        	</body>
        </html>
        
  • 第二组函数

    • hide():

      • $(选择器).hide() :将数组中所有 DOM 对象隐藏起来
    • show():

      • $(选择器).show():将数组中所有 DOM 对象在浏览器中显示起来
    • remove():

      • $(选择器).remove() : 将数组中所有 DOM 对象及其子对象一并删除
    • empty():

      • $(选择器).empty():将数组中所有 DOM 对象的子对象删除
    • html():

      • 设置或返回被选元素的内容(innerHTML)。
      • $(选择器).html():无参数调用方法,获取 DOM 数组第一个匹元素的内容。
      • $(选择器).html(值):有参数调用,用于设置 DOM 数组中所有元素的内容。
    • append():

      • 为数组中所有 DOM 对象添加子对象
      • $(选择器).append(“
        我动态添加的 div
        ”)
    • each():

      • each 是对数组,json 和 dom 数组等的遍历,对每个元素调用一次函数。
      • 语法 1:$.each( 要遍历的对象, function(index,element) { 处理程序 } )
      • 语法 2:jQuery 对象.each( function( index, element ) { 处理程序 } )
      • index: 数组的下标、element: 数组的对象
    • 代码:

      • <!DOCTYPE html>
        <html>
        	<head>
        		<title>函数的使用2</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			// 页面dom对象全部加载完毕时调用function
        			$(function(){
        				// 隐藏所有div
        				$("#btn1").click(function(){
        					$("div").hide();
        				});
        
        				// 显示所有div
        				$("#btn2").click(function(){
        					$("div").show();
        				});
        
        				// 清除所有下拉列表中的option子标签
        				$("#btn3").click(function(){
        					$("select").empty();
        				});
        
        				// 删除所有下拉列表
        				$("#btn4").click(function(){
        					$("select").remove();
        				});
        
        				// 添加元素
        				$("#btn5").click(function(){
        					$("select").append("<option>动态添加的option</option>");
        				});
        
        				// 获取第一个span的文本内容
        				$("#btn6").click(function(){
        					alert($("span").html());  // mysql是一个<b>数据库</b>
        					//alert($("span:first").text()); // mysql是一个数据库
        				});
        
        				// 设置span的内容
        				$("#btn7").click(function(){
        					$("span").html("动态设置span内容");
        				});
        
        				// each循环
        				$("#btn8").click(function(){
        					$("select").each(function(index, element){
        						alert("选中的索引:" + index + ",值:" + element.value);
        					});
        				});
        			});
        		</script>
        		<style type="text/css">
        			div{
        				background:pink;
        			}
        		</style>
        	</head>
        	<body>
        		<p>show和hide</p>
        		<div id="one">我是one</div>
        		<div id="two">我是two</div>
        		<p>remove和empty</p>
        		<select>
        			<option>老虎</option>
        			<option>狮子</option>
        			<option>狗子</option>
        		</select>
        		<br>
        		<select>
        			<option>白菜</option>
        			<option>青菜</option>
        			<option>茄子</option>
        		</select>
        		<br>
        		<p>append</p>
        		<div id="father" style="background:red;">我是父div</div>
        		<br>
        		<p>html</p>
        		<span>mysql是一个<b>数据库</b></span><br>
        		<span>使用jdbc访问数据库</span><br>
        		<p>功能按钮</p>
        		<button id="btn1">隐藏所有div</button><br>
        		<button id="btn2">显示所有div</button><br>
        		<button id="btn3">清除所有下拉列表中的option子标签</button><br>
        		<button id="btn4">删除所有下拉列表</button><br>
        		<button id="btn5">添加元素</button><br>
        		<button id="btn6">获取第一个span的文本内容</button><br>
        		<button id="btn7">设置span的内容</button><br>
        		<button id="btn8">each循环</button><br>
        	</body>
        </html>
        

each函数的使用

  • each():

    • each 是对数组,json 和 dom 数组等的遍历,对每个元素调用一次函数。
    • 语法 1:$.each( 要遍历的对象, function(index,element) { 处理程序 } )
    • 语法 2:jQuery 对象.each( function( index, element ) { 处理程序 } )
    • index: 数组的下标
    • element: 数组的对象
  • 代码:

    • <html>
      	<head>
      		<title>each的用法</title>
      		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
      		<script type="text/javascript">
      			// 页面dom对象全部加载完毕时调用function
      			$(function(){
      				// 遍历数组
      				$("#btn1").click(function(){
      					var arr = ["a", "b", "c"];
      					$(arr).each(function(index, element){
      						alert("数组下标=" + index + ",元素=" + element);
      					});
      				});
      				
      				// 遍历json数据
      				$("#btn2").click(function(){
      					var jarr = {name:"smith", age:18};
      					$.each(jarr, function(k,v){
      						alert("key=" + k + ",value=" + v)
      					});
      				});
      
      				// 遍历dom数组
      				$("#btn3").click(function(){
      					$.each($(":text"), function(index, element){
      						alert("index=" + index + ",element=" + element.value);
      					});
      				});
      			});
      		</script>
      		<style type="text/css">
      			div{
      				background:pink;
      			}
      		</style>
      	</head>
      	<body>
      		<p>文本框val</p>
      		<input type="text" value="苹果" /><br>
      		<input type="text" value="荔枝" /><br>
      		<input type="text" value="西瓜" /><br>
      
      		<p>功能按钮</p>
      		<button id="btn1">遍历数组</button><br>
      		<button id="btn2">遍历json对象</button><br>
      		<button id="btn3">遍历dom数组</button><br>
      	</body>
      </html>
      

事件处理

  • 有两种语法:

    • $(选择器).监听事件名称(处理函数)

      • 监听事件名称是 js 事件中去掉 on 后的内容, js 中的 onclick 的监听事件名称是 click

      • 例如:

        为页面中所有的 button 绑定 onclick,并关联处理函数 fun1
        $("button").click(fun1)
        为页面中所有的 tr 标签绑定 onmouseover,并关联处理函数 fun2
        $("tr").mouseover(fun2)
        
    • $(选择器).on(event,data,function)

      • on() 方法在被选元素上添加事件处理程序。该方法给 API 带来很多便利,推荐使用该方法

      • 例如:

        • 语法:$(选择器).on(event,data,function)
          event:事件一个或者多个,多个之间空格分开
          data:可选。规定传递到函数的额外数据,json 格式
          function: 可选。规定当事件发生时运行的函数。
          
    • 代码:

      • <html>
        	<head>
        		<title>事件处理的方式</title>
        		<script type="text/javascript" src="js/jquery-3.6.0.js"></script>
        		<script type="text/javascript">
        			// 页面dom节点全部加载完毕时执行function
        			$(function(){
        				$("#btn").on("click", function(){
        					$("#mydiv").append("<button id='newbutton'>我是动态添加的按钮</button");
        				});	
        				$("#newbutton").on("click", function(){
        					alert("动态添加的button被点击了");
        				});
                         //可以传数据
        				$("p").on("click", {name:"smith"}, function(event){
        					// alert.data:获取传入的参数,event是自定义名称
        					alert(event.data.name);
        				});
        			});
        			
        		</script>
        		<style type="text/css">
        			div{
        				background:pink;
        				width:100px;
        				height:100px;
        			}
        		</style>
        	</head>
        	<body>
        		<button id="btn">动态添加按钮</button>
        		<br><br>
        		<div id="mydiv"></div>
        		<p>可以点击我</p>	
        	</body>
        </html>
        

jquery-ajax

  • ajax
    • jquery提供了多个关于ajax的方法,方便于我们接收服务器端的文本、xml、json等数据并更新到dom对象上。
  • 方法:
    • $.ajax():是jquery中ajax请求的核心方法
      • 语法:$.ajax({name:value,name:value})
      • name可以是?
        • async:布尔值,默认true,为异步请求
        • contentType:发送到服务器所使用的内容类型
        • data:发送到服务器的数据,可以是数组,字符串,多数是json
        • datatype:期望从服务器获取的数据类型,一般为json
        • error:请求失败要运行的函数
        • success:请求成功要执行的函数
        • type:请求类型(默认为get)
        • url:发送请求的url
    • $.get()
      • $.get() 方法使用 HTTP GET 请求从服务器加载数据
      • 语法:$.get(url,data,function(data),dataType)
      • 注意:参数是固定的,按顺序来
        • url 必需。规定您需要请求的 URL。
        • data 可选。规定连同请求发送到服务器的数据。一般是json数据
        • function(data)可选。当请求成功时运行的函数。data是自定义形参名。
          • data - 包含来自请求的结果数据
        • dataType 可选。规定预期的服务器响应的数据类型。默认地,jQuery 会智能判断。
          • 可能是json,也可能是字符串等
    • $.post()
      • $.post() 方法使用 HTTP POST 请求从服务器加载数据。
      • 语法:$.post(URL,data,function(data),dataType)
      • 参数跟$.get()一样
  • 使用jquery-ajax对省份和城市级联项目进行优化(可以参考ajax学习总结文章)
  • 代码
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
  <head>
    <title>jQuery-ajax</title>
    <script type="text/javascript" src="js/jquery-3.6.0.js"></script>
    <script type="text/javascript">
    </script>
    <script type="text/javascript">

      // 加载所有省份
      function loadProvince(){
        // 每一次加载都得清空下拉列表,否则会导致数据的重复
        $("#province").empty();
        $("#city").empty();
        $("#province").append("<option value='0'>请选择省份...</option>");

        // 通过ajax向服务器发送异步请求
        $.ajax({async:true, dataType:"json", type:"get", url:"province/search", success:function(resp){
            // 遍历resp数组
            $.each(resp, function(i,n){ // 使用jquery函数each遍历数组 i为索引,n为json对象
              $("#province").append("<option value='"+n.id+"'>"+n.name+"</option>");
            });
          }});
      }

      // 页面的dom节点加载完毕时执行
      $(function(){
        // 页面加载完成自动调用--更新省份
        loadProvince();

        // 更新省份
        $("#btn").on("click", function(){
          loadProvince();
        });

        // 绑定下拉列表选项被选中事件
        $("#province").on("change", function(){
          // 每一次选中都需要清空当前选中项的子对象
          $("#city").empty();

          // 拿到选中的省份option的value值,也就是省份id
          var provinceid = $("#province>option:selected").val();

          // 通过省份id来查找city
          /*$.ajax({async: true, dataType: "json", type: "get", url: "city/search", data:{provinceid:provinceid},
          success:function(resp){
            // 遍历json数组--[{"id":"12","name":"太原","provinceid":"2"},{"id":"13","name":"大同","provinceid":"2"}]
            $.each(resp, function(i, n){
              $("#city").append("<option>"+n.name+"</option>"); //添加选项
            });
          }});*/

          // 使用jquery的$.post()来实现--参数是固定的,不需要用json格式,简洁许多
          $.post("city/search", {provinceid:provinceid}, callback, "json");
        });
      });

      // 定义一个回调函数来处理返回数据
      function callback(resp){
        $.each(resp, function(i, n){
          $("#city").append("<option>"+n.name+"</option>");
        });
      }
    </script>
  </head>
  <body>
    <h2>级别联查</h2>
    <table border="1px">
      <tr>
        <td>省份:</td>
        <td>
          <select id="province">
          </select>
          <input type="button" value="查询" id="btn" />
        </td>
      </tr>
      <tr>
        <td>城市:</td>
        <td>
          <select id="city">
          </select>
        </td>
      </tr>
    </table>
  </body>
</html>
@WebServlet({"/province/search", "/city/search"})
public class SearchServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String servletPath = request.getServletPath();
        if ("/province/search".equals(servletPath)){
            doProvince(request, response);
        } else if("/city/search".equals(servletPath)){
            doCity(request, response);
        }
    }

    /**
     * 查询省份对应的所有城市
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void doCity(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{

        request.setCharacterEncoding("utf-8");
        String provinceId = request.getParameter("provinceid");
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        // 定义一个城市集合
        List<City> citys = new ArrayList<>();
        // 定义一个标志位,来表示是否查询到数据
        boolean flag = false;

        // 获取参数不为空则执行数据库操作
        if (provinceId != null && !provinceId.trim().equals("")){
            try {
                conn = DBUtil.getConnection();
                String sql = "select id,name,provinceid from city where provinceid = ?";
                ps = conn.prepareStatement(sql);
                ps.setString(1, provinceId);
                rs = ps.executeQuery();
                while (rs.next()){
                    // 将城市信息添加到集合中
                    citys.add(new City(rs.getString("id"), rs.getString("name"), rs.getString("provinceid")));
                    flag = true;
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }finally{
                DBUtil.close(conn, ps, rs);
            }
        }

        // 查询到数据则把数据转为json字符串返回到客户端浏览器
        if (flag){
            response.setContentType("application/json;charset=utf-8");
            ObjectMapper om = new ObjectMapper();
            String s = om.writeValueAsString(citys);
            System.out.println(s);
            PrintWriter out = response.getWriter();
            out.write(s);
            out.flush();
        }
    }

    /**
     * 查询所有省份
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void doProvince(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        // 新建一个集合,拿来存储省份
        List<Province> pros = new ArrayList<>();
        boolean flag = false;
        try {
            conn = DBUtil.getConnection();
            String sql = "select id,name,jiancheng,shenghui from province";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                // 把省份对象添加到集合里
                pros.add(new Province(rs.getString("id"), rs.getString("name"),
                    rs.getString("jiancheng"), rs.getString("shenghui")
                ));
                flag = true; // 把标志位设置为true
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally{
            DBUtil.close(conn, ps, rs);
        }

        // 取到数据了返回到客户端浏览器
        if (flag) {
            response.setContentType("application/json;charset=utf-8");
            ObjectMapper om = new ObjectMapper();
            String s = om.writeValueAsString(pros);
            PrintWriter out = response.getWriter();
            out.write(s);
            out.flush();
        }
    }
}

jquery学习总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值