使用ajax改造及其扩展

plain简单的 普通的
同一个服务器中的 servlet的访问地址不能相同 即使你不用那个类
以前的时候是 客户端页面加载 发到后台 后台查到数据后 再把数据存储到作用域中 ,再把数据返回,在页面展示

现在 作用域移除掉 将数据直接返回 直接在前端里面一行一行的展示(json)
在这里插入图片描述
以前 jsp+servlet我们每一次点go都会去刷新页面,只要网络有问题,他的信息加载都会出现问题。现在有了ajax以后,点击go以后,页面不会刷新,同样网络有了延迟以后,他只是在(圈住的黄色区域)会显示错乱,而其他位置还是正常的,你还是可以继续点击其他位置。以前所有的数据都需要加载一遍,比较浪费 现在只加载我们需要的数据,提高了速度 效率
有了ajax以后就不需要用到el和jstl

以前 admin.jsp页面

<c:if test="${empty pageBean }">
<c:redirect url="/news?opr=adminNews">returns;</c:redirect>
</c:if>


<tbody>
							<!--ajax给表格添加id 因为我们是往表格里面存数据  也就是追加一行一行的tr  -->

								<c:forEach items="${pageBean.list }" var="newsDetail">
							<tr>
							<td>${newsDetail.title }</td>
							<td>${newsDetail.author }</td>
							<td>
							<fmt:formatDate value="${newsDetail.createDate }" pattern="yyyy-MM-dd HH:mm:ss"/>
							
							</td>
							<td><a href="adminNewsCreate.jsp?id=2">修改</a>&nbsp;<a href="javascript:delNews${newsDetail.id };">删除</a></td>
							</tr>
							</c:forEach> 
						</tbody>

现在使用ajax以后

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.12.4.js"  charset="UTF-8"></script>
<script type="text/javascript">
//页面加载时就去查询新闻列表数据(发送ajax请求)
$(function(){
	//alert(1);
	//url路径建议你写绝对路径 在header.jsp中写一个隐藏域 通过jq获取
	$.ajax({
		type:"POST",
		url:$("#realPath").val()+"/news",
		data:{"opr":"adminNews"},//plainObject
		dataType:"JSON",
		success:function(result){
		//	alert(result);
		//PageBean内存储的新闻列表信息
		
		var list=result.list;
		for(var i=0;i<list.length;i++){
			var news=list[i];
			var trStr="<tr>"
							+"<td>"+news.title+"</td>"
							+"<td>"+news.author+"</td>"
							+"<td>"+news.createDate+"</td>"
							+"<td>"
								+"<a href='#'>修改</a>&nbsp";
								+"<a href='#'>删除</a>"
							+"</td>"
						+"</tr>"
		$("#newsList").append(trStr);
		}
		},
		error:function(){
			alert("服务器繁忙,请稍后重试");
		},
	});
});
</script>

header.jsp页面的隐藏域

<input type="hidden" id="realPath" value="${pageContext.request.contextPath }"/>
当controller层里面的代码为下面的时候,在admin.jsp页面进行遍历,时间格式就是不正确的
String pageBeanJson = JSON.toJSONString(pageBean);

在这里插入图片描述
在这里插入图片描述
解决时间格式问题
在这里插入图片描述
在这里插入图片描述

js中

//绑定事件
<input type="text" name="username" onblur="checkUser(this.value)"/>
//此处省略部分代码
function checkUser(username){
//获取表单中的value值
alert(username);
//在判断的时候直接根据username进行判断
}


//获取文档中id为xx的元素
var tip=document.querySelector("#xx");
//往里面添加内容
tip.innerHTML="";

jq中

//插入节点子元素
$("a").append("b")  (a,b)  
//下一个元素
$().next()

//绑定事件
$("input[name=username]").blur(function(){
//获取表单中的value值
var username=$(this).val();
//往id=title的属性中添加内容
$("#title").html("xxx");
//往class=page-num-ul中的第一个li里面添加内容
$(".page-num-ul li:eq(0)").html("");
})

Ajax扩展

jQuery对于JS的Ajax做了封装,封装为了$.ajax()方法,他是最基本的实现
下方几个是基于$.ajax实现的!必须掌握$.ajax()

	$.ajax({
		url:,
		type:,
		data:请求数据,
		dataType:服务器返回的数据的格式,
		success:function(){
		},
		error:function(){
		},
});

1.掌握$.get()使用

$.ajax({
	url:,
	type:"GET",
	data:请求数据,
	dataType:服务器返回的数据的格式,
	success:function(){
	},
	error:function(){
	},
	});
现在的写法:
$.get(url,data,function(result){},dataType);//语法内的参数是固定的

例:
var url="user?username="+username;
			//顺序是固定的
			$.get(url,function(data){
				if(data == "yes"){ // yes 能用  no 不能用
					$("#tip").html("<font color='black'>用户名可以使用!</font>");
				}else{
					$("#tip").html("<font color='red'>这个名称太抢手!</font>");
				}
			},"text");

2.掌握$.post()使用

$.post(url,data,function(){},dataType);

		var url="user";
				$.post(url,{"username":username},function(data){
					if(data == "yes"){ // yes 能用  no 不能用
					$("#tip").html("<font color='lawngreen'>用户名可以使用!</font>");
						}else{
							$("#tip").html("<font color='red'>这个名称太抢手!</font>");
						}
					},"text");

3.掌握$.getJSON()使用

$.ajax({
	url:,
	type:"GET",
	data:,
	dataType:"JSON",
	success:function(){
	},
	error:function(){
	},
	});
//现在的写法
$.getJSON(url,[data],function(result){})                 GET请求可以省略掉data
//注意json的响应格式必须正确

在这里插入图片描述
在这里插入图片描述
$ 是jquery的一个对象

4.掌握load()使用

$(选择器).load(); 用来使用Ajax来加载html代码
实现异步不刷新
返回的是html页面的代码
可能存在的问题:样式可能会被jsp代码覆盖掉
在这里插入图片描述
next() 根据题意 如果是页面1的某一块内容需要换成页面2的,那就直接替换 next()就不需要写

4.使用jsp改造

<button type="submit" class="page-btn" id="search">GO</button>

<input type="hidden" name="p" value="1"/>
		 					
		 					<script type="text/javascript">
		 					  function method1(frm,pageNo){
		 						  frm.p.value=pageNo;
		 						 $("#search").click();
		 					  }
<c:choose>
								<c:when test="${pageBean.currentPage == 1}">
									<a href="javascript:;">首页</a>&nbsp;
									<a href="javascript:;">上一页</a>&nbsp;
								</c:when>
								<c:otherwise>
									<a href="javascript:jump_to(document.forms[0],1)">首页</a>&nbsp;
									<a href="javascript:jump_to(document.forms[0],${pageBean.currentPage - 1});">上一页</a>&nbsp;
								</c:otherwise>
							</c:choose>
							<c:choose>
								<c:when test="${pageBean.currentPage == pageBean.totalPage}">
									<a href="javascript:;">下一页</a>&nbsp;
									<a href="javascript:;">尾页</a>&nbsp;
								</c:when>
								<c:otherwise>
									<a href="javascript:jump_to(document.forms[0],${pageBean.currentPage + 1});">下一页</a>&nbsp;
									<a href="javascript:jump_to(document.forms[0],${pageBean.totalPage});">尾页</a>&nbsp;
								</c:otherwise>
							</c:choose>
<span class="page-go-form"><label>跳转至</label>
						<input type="hidden" id="totalPage" value="${pageBean.totalPage }"/>
							<input type="text" name="inputPage" id="inputPage" class="page-key" />页
							<button type="button" class="page-btn" onClick="jump_to(document.getElementById('inputPage').value)">GO</button>
						</span>
						
						<script type="text/javascript">
						function jump_to(pageNo){
							var totalPage=document.getElementById("totalPage").value-0;
							var reg=/^[1-9]\d*$/;
							
							if(pageNo==null || pageNo.trim()==""){
								alert("内容不能为空");
							}else if(pageNo>totalPage || pageNo<1){
								alert("输入的页码超出范围!请输入1-"+totalPage+"之间的数值范围!");
							}else if(!reg.test(pageNo)){
								alert("输入的页码格式非法!");
							}else{
							  	method1(document.forms[0],pageNo);
							}
						}
						</script>

4.使用ajax改造

<table id="news-list" cellpadding="1" cellspacing="1" class="admin-list">
						<thead>
							<tr class="admin-list-head">
								<th>新闻标题</th>
		                        <th>作者</th>
		                        <th>时间</th>
		                        <th>操作</th>
		                    </tr>
		                </thead>
		                 <tbody>
		                 </tbody>
<button type="button" class="page-btn" id="search">GO</button>
<input type="hidden" name="p" value="1"/>
		 					
		 					<script type="text/javascript">
		 					  function method1(frm,pageNo){
		 						  frm.p.value=pageNo;
		 						 $("#search").click();
		 					  }
		 					
		 					</script>
<span class="page-go-form"><label>跳转至</label>
						
							<input type="text" name="inputPage" id="inputPage" class="page-key" />页
							<button type="button" class="page-btn" onClick="jump_to(document.getElementById('inputPage').value)">GO</button>
						</span>
						
						<script type="text/javascript">
						function jump_to(pageNo){
							var totalPage=document.getElementById("totalPage").value-0;
							var reg=/^[1-9]\d*$/;
							
							if(pageNo==null || pageNo.trim()==""){
								alert("内容不能为空");
							}else if(pageNo>totalPage || pageNo<1){
								alert("输入的页码超出范围!请输入1-"+totalPage+"之间的数值范围!");
							}else if(!reg.test(pageNo)){
								alert("输入的页码格式非法!");
							}else{
							  	method1(document.forms[0],pageNo);
							}
						}
						</script>
<%-- 路径分不清楚的时候 使用
<input type="hidden" id="realPath" value="${pageContext.request.contextPath }"/>
url:$("#realPath").val()+"/news", --%>
<script type="text/javascript">
$("#search").click(function(){
	
	$("select[name=categoryId],input[name=title]").change(function(){
		document.forms[0].p.value=1;
	})
	
	var cid=$("select[name=categoryId]").val();
	var title=$("input[name=title]").val();
	var p=$("input[name=p]").val();
	
	loadAdminNews(cid,title,p);
})

function loadAdminNews(cid,title,p){
	$.ajax({
		url:"../news",
		data:{"opr":"adminNews","categoryId":cid,"title":title,"p":p},
		dataType:"JSON",
		type:"post",
		success:function(result){
			$("#news-list tbody").empty();
			//pageBean内存储的信息
			var newsList=result.list;
			
			for(var i=0;i<newsList.length;i++){
				var news=newsList[i];
				var trStr="<tr>"+
				              "<td>"+news.title+"</td>"+
				              "<td>"+news.author+"</td>"+
				              "<td>"+news.createDate+"</td>"+
				              "<td>"+
				                "<a href='#'>修改</a>&nbsp;"+
						       "<a href='#'>删除</a>"+
				             "</td>"+
				              "</tr>";
				$("#news-list").append(trStr);
			}
			
			
			//分页条信息
			$(".page-num-ul li:eq(0)").html("共"+result.totalCount+"条记录&nbsp;&nbsp;"+result.currentPage+"/"+result.totalPage+"页&nbsp;");

			
			var indexPageA = "";
			var prePageA = "";
			var lastPageA = "";
			var nextPageA = "";
			if(result.currentPage <= 1){
				indexPageA = "<a href=\"javascript:;\">首页</a>&nbsp;";
				prePageA = "<a href=\"javascript:;\">上一页</a>&nbsp;";
			}else{
				indexPageA = "<a href=\"javascript:method1(document.forms[0],1)\">首页</a>&nbsp;";
				prePageA = "<a href=\"javascript:method1(document.forms[0],"+(result.currentPage - 1)+");\">上一页</a>&nbsp;";
			}
			
			if(result.currentPage >= result.totalPage){
				nextPageA = "<a href=\"javascript:;\">下一页</a>&nbsp;";
				lastPageA = "<a href=\"javascript:;\">尾页</a>&nbsp;";
			}else{
				nextPageA = "<a href=\"javascript:method1(document.forms[0],"+(result.currentPage + 1)+");\">下一页</a>&nbsp;";
				lastPageA = "<a href=\"javascript:method1(document.forms[0],"+(result.totalPage)+");\">尾页</a>&nbsp;";
			}
			//影藏一个总页数
			var totalStr="<input type=\"hidden\" id=\"totalPage\" value=\"result.totalPage\"/>";

			
			$(".page-num-ul li:eq(1)").html(indexPageA+prePageA+nextPageA+lastPageA+totalStr);
			
			
			
			
		},
		error:function(){
			alert("服务器繁忙");
		}
	})
}
 $(function(){
	loadAdminNews();
	
 })

后端

/*request.setAttribute("pageBean", pageBean);
		request.setAttribute("categoryList", categoryList);
		request.setAttribute("categoryId", categoryId);
		request.setAttribute("title", title);
		//localhost:8080/kgcnews/news?opr=adminNews
		request.getRequestDispatcher("pages/admin.jsp").forward(request, response);*/
		
		//FastJson 阿里巴巴出品的 用于json和java对象的转换  需要导包
		
		//pageBean这个对象转换为json字符串
	//	String pageBeanJson = JSON.toJSONString(pageBean);
		//JSON默认情况下 时间格式会解析为时间的毫秒值1233232344
		//目前我们知道固定的时间格式 所以在响应的时候直接转换
		String pageBeanJson = JSON.toJSONStringWithDateFormat(pageBean,"yyyy-MM-dd");
		System.out.println(pageBeanJson);
		response.getWriter().print(pageBeanJson);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值