JavaWeb_Ajax通过JQuery和原生js异步传输数据
菜鸟教程 传送门
AJAX 优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
XMLHttpRequest 对象 传送门
(一) [JQuery]定时发送ajax请求
(二) [JQuery]发送ajax时客户端服务端进行数据传递
(三) [原生JS]使用原生js代码完成ajax请求
(四)通过Ajax检测用户注册信息重复
[JQuery]定时发送ajax请求 JQuery.ajax()文档
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script> <script type="text/javascript"> //2000ms调用一次这个方法
setInterval("callAjax()",2000);
function callAjax(){
$.ajax({
// alert("ajax");ajaxrequest
url:"${pageContext.request.contextPath }/ajaxrequest",
cache:false, //去除缓存
type:"get",
success:function(msg){
//将数据刷新到页面上
$("#msg").append(msg);
}
});
} </script> </head>
<body> <form action="${pageContext.request.contextPath}/login_do" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="登录" />
</form> <div id ="msg"></div> </body>
</html>
ajax.jsp
package com.Gary.controller; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/ajaxrequest")
public class AjaxServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("发送ajax请求");
response.setContentType("text/html; charset=utf-8");
response.getWriter().append("ajax数据"); } }
AjaxServlet.java
客户端发送get请求由AjaxServlet.java中doGet去接收
[JQuery]发送ajax时客户端服务端进行数据传递
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script> <script type="text/javascript"> //2000ms调用一次这个方法
setInterval("callAjax()",2000);
function callAjax(){
$.ajax({
// alert("ajax");ajaxrequest
// 发送中文需要对中文做一个编码使用encodeURI()
url:encodeURI("${pageContext.request.contextPath }/ajaxrequest?data=我是客户端发送过来的数据"),
cache:false, //去除缓存
type:"get",
success:function(msg){
//将数据刷新到页面上
$("#msg").append(msg);
}
});
} </script> </head>
<body> <form action="${pageContext.request.contextPath}/login_do" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="登录" />
</form> <div id ="msg"></div> </body>
</html>
ajax.jsp
package com.Gary.controller; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/ajaxrequest")
public class AjaxServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("发送ajax请求");
System.out.println("收到了ajax请求:"+request.getParameter("data"));
response.setContentType("text/html; charset=utf-8");
response.getWriter().append("ajax数据"); } }
AjaxServlet.java
中文编码处理时使用encodeURI()方法
服务端数据的交互也通过AjaxServlet.java中的doGet去接收
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("发送ajax请求");
System.out.println("收到了ajax请求:"+request.getParameter("data"));
response.setContentType("text/html; charset=utf-8");
response.getWriter().append("ajax数据");
}
【原生js】使用原生js代码完成ajax请求
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script> <script type="text/javascript"> //2000ms调用一次这个方法
setInterval("callAjax()",2000);
function callAjax(){
//alert("123123");
var xmlhttp = new XMLHttpRequest();
//xmlHttp.open("post", url, true); 第三个:是否是异步请求 加随机数去处理缓存
xmlhttp.open("GET",encodeURI("${pageContext.request.contextPath }/ajaxrequest?data=我是客户端发送的数据&"+Math.random()),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
//得到了服务器端的响应
$("#msg").append(xmlhttp.responseText);
}
}
} </script> </head>
<body> <form action="${pageContext.request.contextPath}/login_do" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="登录" />
</form> <div id ="msg"></div> </body>
</html>
ajax.jsp
package com.Gary.controller; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/ajaxrequest")
public class AjaxServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("发送ajax请求");
System.out.println("收到了ajax请求:"+request.getParameter("data"));
response.setContentType("text/html; charset=utf-8");
response.getWriter().append("ajax数据"); } }
AjaxServlet.java
setInterval("callAjax()",2000);
function callAjax(){
//alert("123123");
var xmlhttp = new XMLHttpRequest();
//xmlHttp.open("post", url, true); 第三个:是否是异步请求 加随机数去处理缓存
xmlhttp.open("GET",encodeURI("${pageContext.request.contextPath }/ajaxrequest?data=我是客户端发送的数据&"+Math.random()),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
//得到了服务器端的响应
$("#msg").append(xmlhttp.responseText);
}
}
}
通过Ajax检测用户注册信息重复
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
// 当网页加载完后会调用这个函数
$(function(){
// 当username失去焦点的时候执行
$("input[name='username']").blur(verifyUsername);
}); function verifyUsername(){
// $("input[name='username']").val()
$.ajax({
url:encodeURI("${pageContext.request.contextPath }/verifyUsername"),
type:"post",
data:{
// 验证用户名是否存在
username:$("input[name='username']").val()
},
cache:false,
dataType:"json",
success:function(msg){
//alert(msg.isSuccess);
if(msg.isSuccess){
alert("用户名可以用!");
}else{
alert("用户名重复!");
} }
});
}
</script> </head>
<body> <%
if(request.getAttribute("msg")!=null)
out.println(request.getAttribute("msg")+"<br/>");
%> 注册
<hr/> <form action="<%=request.getContextPath() %>/register_do" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
年龄:<input type="text" name="age" /><br/>
性别: 男<input type="radio" name="sex" value="男" checked="checked"/>女<input type="radio" name="sex" value="女" /><br/>
<input type="submit" value="注册" />
</form> </body>
</html>
register.jsp
package com.Gary.service; import com.Gary.dao.UserDao;
import com.Gary.model.User; public class UserService {
//处理注册请求
public boolean register(String username,String password,int age ,String sex) {
UserDao userDao = new UserDao();
boolean isExist =userDao.isExist(username);
if(isExist)
return false;
else
userDao.addUser(username, password, age, sex);
return true;
} public User login(String username,String password) {
return new UserDao().getUserByUP(username, password);
} public boolean isExist(String username) {
return new UserDao().isExist(username);
} }
UserService.java
package com.Gary.controller; import java.io.IOException;
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 com.Gary.service.UserService; @WebServlet("/verifyUsername")
public class VerifyUsernameServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
UserService service = new UserService();
boolean isExist = service.isExist(username);
response.getWriter().append("{\"isSuccess\":"+!isExist+"}");
} }
VerityUsernameServlet.java
其他页面代码(MVC)管理员后台商品查询demo
通过Ajax异步请求在鼠标离焦username标签时将请求发送至verifyUsername并自动校验数据库中用户ID
<script type="text/javascript">
// 当网页加载完后会调用这个函数
$(function(){
// 当username失去焦点的时候执行
$("input[name='username']").blur(verifyUsername);
}); function verifyUsername(){
// $("input[name='username']").val()
$.ajax({
url:encodeURI("${pageContext.request.contextPath }/verifyUsername"),
type:"post",
data:{
// 验证用户名是否存在
username:$("input[name='username']").val()
},
cache:false,
dataType:"json",
success:function(msg){
//alert(msg.isSuccess);
if(msg.isSuccess){
alert("用户名可以用!");
}else{
alert("用户名重复!");
} }
});
}
</script>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
UserService service = new UserService();
//service.isExist()判断有无重复用户ID
boolean isExist = service.isExist(username);
//有的话返回false表示不允许用户注册,反之为true
response.getWriter().append("{\"isSuccess\":"+!isExist+"}");
}
设置当Ajax异步校验成功返回msg类型时使用dataType:"xxx"并在doPost中的isSuccess使用" "引号引起来
中文编码处理时使用encodeURI()方法
JavaWeb_Ajax通过JQuery和原生js异步传输数据的更多相关文章
- jQuery与原生js实现banner轮播图
jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...
- 通过游戏认识 --- JQuery与原生JS的差异
前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...
- 原生JS的使用,包括jquery和原生JS获取节点、jquery和原生JS修改属性的比较
一.前言 相比于JS这条直达终点.满是荆棘的小路,jquery无疑是康庄大道了,足够的简洁.易用给了它辉煌的地位.然而,毕竟是绕着道的插件,当小路走着走着变成大路的时候,曾经的大路也就失去了他自身的优 ...
- 通过案例来剖析JQuery与原生JS
首先来个例子: 我们在登陆或者注册一些网站时,如果某一项点过了但没填,鼠标移走后是不是经常看到网站有相应的红色字体提示呢? 那下面我们就以这个为例来剖析下jQuery和原生JS的一些区别,来上代码: ...
- 类似jQuery的原生JS封装的ajax方法
一,前言: 前文,我们介绍了ajax的原理和核心内容,主要讲的是ajax从前端到后端的数据传递的整个过程. Ajax工作原理和原生JS的ajax封装 真正的核心就是这段代码: var xhr = ne ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- JQuery和原生JS跨域加载JSON数据或HTML。
前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...
- jquery与原生JS实现增加、减小字号功能
预览效果: 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- jQuery和原生JS的对比
原生JS的缺点: 不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的覆盖掉 原生js的api名字太长,难以书写,不易记住 原生js有的代码冗余 原生js中的属性或者方 ...
随机推荐
- [BZOJ 2002] [HNOI2010]弹飞绵羊(Link Cut Tree)
[BZOJ 2002] [HNOI2010]弹飞绵羊(Link Cut Tree) 题面 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一 ...
- 小白基础Python重要的字符串详解String的内置方法
String的内置方法: st='hello world {name} is {age}' {} 特殊内容需要识别format print(st.count('1')) 统计元素个数 print ...
- C语言经典100例(1-50)
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. main ...
- AGC009E Eternal Average
atc 神题orz 那个擦掉\(k\)个数然后写上一个平均值可以看成是\(k\)叉Huffman树的构造过程,每次选\(k\)个点合成一个新点,然后权值设为平均值.这些0和1都会在叶子的位置,同时每个 ...
- ajax异步刷新请求数据
AJAX是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新.AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XM ...
- MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)
一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...
- Altium Designer 只导出PCB元器件及标号的PDF文件的方法
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 作者:struct_mooc 博客地址:https://www.cnblogs.com/stru ...
- [转] JAVA分为三个体系,JavaSE,JavaEE,JavaME(J2ME)的区别以及各个版
Java SE(JavaPlatform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...
- pl_sql例题
0. 准备工作: set serveroutput on hellowrold 程序 begindbms_output.put_line('hello world');end;/ [语法格式]--de ...
- (持续更新中~~~)kafka--消息引擎与分布式流处理平台
kafka概述 kafka是一个分布式的基于发布/订阅模式的消息队列(message queue),一般更愿意称kafka是一款开源的消息引擎系统,只不过消息队列会耳熟一些.kafka主要应用于大数据 ...