Ajax(javascript)案例
一、注册案例(Get方式)
1、前台
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ajax</title>
</head>
<body>
<form>
用户名[GET]:<input id="usernameID" type="text" name="username" />
光标移出后,立即检查结果
</form>
<hr />
<span id="resultID"></span>
<script type="text/javascript">
//定位文本框,同时提供焦点失去事件
document.getElementById("usernameID").onblur = function() {
var userName=this.value;
//判断是否为空
if(userName.length==0){
document.getElementById("resultID").innerHTML="<font color='red'>用户名必填</font>";
}else{
//对汉字进行UTF-8编码
userName=encodeURI(userName);
console.log(userName);
//1、创建AJAX对象
var ajax = createAJAX();
//2、准备发送请求
var method = "GET";
//为了适应IE浏览器对其不变的地址缓存,以致其不会继续去发送请求,所以加上时间,保证唯一
var url = "${pageContext.request.contextPath}/RegisterServlet?time="+new Date().getTime()+"&userName="+userName;
ajax.open(method, url);
//3、真正发送请求的具体数据到服务器,如果球体中无数据,就用null表示
ajax.send(null);
//4、Ajax异步对象不断监听服务器
ajax.onreadystatechange = function() {
//如果状态码为4
if (ajax.readyState == 4) {
//如果响应码为200
if (ajax.status == 200) {
var tip=ajax.responseText;
document.getElementById("resultID").innerHTML = tip;
}
}
}
}
}
function createAJAX() {
var ajax = null;
try {
//如果是IE5——IE12的话
ajax = new ActiveXObject("microsoft.xmlhttp");
} catch (e1) {
//如果是非IE的话
ajax = new XMLHttpRequest();
}
return ajax;
}
</script>
</body>
</html>
2、servlet
public class RegisterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
userName=new String(userName.getBytes("iso-8859-1"),"utf-8");
String tip = "<font color='green'>可以注册</font>";
if("郭庆兴".equals(userName)){
tip = "<font color='red'>该用户已存在</font>";
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.write(tip);
pw.flush();
pw.close();
}
}
二、注册(POST)
1、前台
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ajax</title>
</head>
<body>
<form>
用户名[POST]:<input id="usernameID" type="text" name="username" />
光标移出后,立即检查结果
</form>
<hr/>
<span id="resultID"></span>
<script type="text/javascript">
//定位文本框,同时提供焦点失去事件
document.getElementById("usernameID").onblur = function() {
var userName=this.value;
//判断是否为空
if(userName.length==0){
document.getElementById("resultID").innerHTML="<font color='red'>用户名必填</font>";
}else{
//1、创建AJAX对象
var ajax = createAJAX();
//2、准备发送请求
var method = "POST";
//为了适应IE浏览器对其不变的地址缓存,以致其不会继续去发送请求,所以加上时间,保证唯一
var url = "${pageContext.request.contextPath}/RegisterServlet?time="+new Date().getTime();
ajax.open(method, url);
//设置AJAX请求头为POST,他会将请求体中的汉字自动进行UTF-8的编码
//<form action="" enctype="application/x-www-form-urlencoded"></form>
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
//3、真正发送请求的具体数据到服务器,
var content="userName="+userName;
ajax.send(content);
//4、Ajax异步对象不断监听服务器
ajax.onreadystatechange = function() {
//如果状态码为4
if (ajax.readyState == 4) {
//如果响应码为200
if (ajax.status == 200) {
var tip=ajax.responseText;
//创建img标签
var imgElement=document.createElement("img");
//设置imng标签的属性
imgElement.src=tip;
imgElement.style.width="12px";
imgElement.style.height="12px";
//定位span标签、
var spanElement=document.getElementById("resultID");
//清空span标签
spanElement.innerHTML = "";
//请img标签加入到span标签中去
spanElement.appendChild(imgElement);
}
}
}
}
}
function createAJAX() {
var ajax = null;
try {
//如果是IE5——IE12的话
ajax = new ActiveXObject("microsoft.xmlhttp");
} catch (e1) {
//如果是非IE的话
ajax = new XMLHttpRequest();
}
return ajax;
}
</script>
</body>
</html>
这与前面,有个地方不同,就是在open方法和send方法之间要设置一个响应头,否则后台没办法接收到数据。

2、后台servlet
public class RegisterServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String userName=request.getParameter("userName");
String tip="img/right.gif";
if ("郭庆兴".equals(userName)) {
tip="img/error.gif";
}
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.write(tip);
pw.flush();
pw.close();
}
}
结果如图


三、三级联动
省份-城市联动
1、前台
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ajax</title>
</head>
<body>
省份:<select id="provinceID" style="width: 120px">
<option>选择省份</option>
<option>湖北省</option>
<option>广东省</option>
<option>湖南省</option>
</select>
城市:<select id="cityID" style="width: 120px">
<option>选择城市</option>
</select>
<script type="text/javascript">
//定位下拉框,同时添加内容改变事件
document.getElementById("provinceID").onchange = function() {
//清空城市下拉列表的内容,除了第一项
var cityElement=document.getElementById("cityID");
cityElement.length=1;
//获取选中的省份标签的索引号,从0开始
var index=this.selectedIndex;
//定位当前的option标签
var optionElement=this[index];
//获取option内容的标签
var province=optionElement.innerHTML;
//如果选中的不是提示“选择省份”,不需要向服务器去查询城市信息
if ("选择省份" != province) {
var ajax=createAJAX();
var method="post";
var url="${pageContext.request.contextPath}/ProvinceServlet?time="+new Date().getTime();
ajax.open(method, url);
//设置响应头
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
var content="province="+province;
ajax.send(content);
//***************等待服务器发送数据**************
ajax.onreadystatechange=function(){
if (ajax.readyState==4) {
if (ajax.status=200) {
//从ajax异步对象中获取服务器响应的xml文档
var xmlDocument = ajax.responseXML;
//按照DOM规则解析xml文档
var cityElementArray = xmlDocument.getElementsByTagName("city");
var size=cityElementArray.length;
for (var i = 0; i < size; i++) {
var city = cityElementArray[i].firstChild.nodeValue;
//开始往城市的下拉栏添加
var optionElement=document.createElement("option");
optionElement.innerHTML=city;
cityElement.appendChild(optionElement);
}
}
}
}
}
}
function createAJAX() {
var ajax = null;
try {
//如果是IE5——IE12的话
ajax = new ActiveXObject("microsoft.xmlhttp");
} catch (e1) {
//如果是非IE的话
ajax = new XMLHttpRequest();
}
return ajax;
}
</script>
</body>
2、后台servlet
package com.gqx.test1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 二级联动,基于xml方式完成
* @author 郭庆兴
*
*/
public class ProvinceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String province=request.getParameter("province");
//通知ajax异步对象,服务器响应的数据格式为xml
response.setContentType("text/xml;charset=UTF-8");
//获取字符流输出
PrintWriter pw=response.getWriter();
//如果是连接数据库的话,应该查出来的是一个list集合,然后将其按xml的方式封装,如下格式
pw.write("<?xml version='1.0' encoding='UTF-8'?>");
pw.write("<root>");
if ("湖北省".equals(province)) {
pw.write("<city>武汉</city>");
pw.write("<city>黄石</city>");
pw.write("<city>荆州</city>");
pw.write("<city>襄阳</city>");
pw.write("<city>宜昌</city>");
}else if ("湖南省".equals(province)) {
pw.write("<city>长沙</city>");
pw.write("<city>株洲</city>");
pw.write("<city>萍乡</city>");
pw.write("<city>湘潭</city>");
pw.write("<city>岳阳</city>");
}else if ("广东省".equals(province)) {
pw.write("<city>广州</city>");
pw.write("<city>深圳</city>");
pw.write("<city>中山</city>");
pw.write("<city>佛山</city>");
pw.write("<city>汕头</city>");
pw.write("<city>珠海</city>");
}
pw.write("</root>");
pw.flush();
pw.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
这里要注意的是在后台要用xml的方式去发送数据,同时前台去接受数据的时候要去解析,先接受
//从ajax异步对象中获取服务器响应的xml文档
var xmlDocument = ajax.responseXML;
//按照DOM规则解析xml文档
var cityElementArray = xmlDocument.getElementsByTagName("city");
要获取xml最小节点内的数据可以通过如下方法去获取
var city = cityElementArray[i].firstChild.nodeValue;
最终 效果如下

Ajax(javascript)案例的更多相关文章
- jQuery中的ajax用法案例
什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载 ...
- Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例
一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...
- JavaScript案例开发之扑克游戏
随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...
- 关于ajax入门案例
$.ajax方法 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他ht ...
- node+ajax实战案例(2)
2.静态资源渲染 2.1.创建http服务器 var http = require('http'); var url = require('url'); var app = http.createSe ...
- ajax经典案例--省市联动
ajax的省市联动案例 如果我们的代码比较复杂,可以通过file_put_contents来输出信息到某个日志. 在一个元素中添加另一个元素使用的方法是:appendChild(). 函数append ...
- ajax交互案例
数据交互是前端很重要的一部分,静态页是基础,而交互才是网页的精髓.交互又分为人机交互和前后端数据交互,现阶段的互联网下,大部分的网站都要进行前后端数据交互,如何交互呢?交互的流程大概就是前端发送数据给 ...
- JavaScript案例一:Window弹窗案例
注:火狐可运行,谷歌不可运行(安全级别高) <!DOCTYPE html> <html> <head> <title>JavaScript 弹窗案例&l ...
- JQuery的ajax登录案例
1.简单版AjaxLogin.html代码: <head> <title></title> <script src="jquery-1.8.3.js ...
随机推荐
- wx.setStorageSync(KEY,DATA)
wx.setStorageSync 每个微信小程序都可以有自己的本地缓存,可以通过wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorag ...
- jmeter 4.0版本更新说明(个人做个记录)总版本更新合集
版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供 ...
- IntelliJ IDEA配置Tomcat(完整版教程)
查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...
- VS IDE 中Visual C++ 中的项目属性配置
VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...
- (原创)用c++11打造好用的any
上一篇博文用c++11实现了variant,有童鞋说何不把any也实现一把,我正有此意,它的兄弟variant已经实现了,any也顺便打包实现了吧.其实boost.any已经挺好了,就是转换异常时,看 ...
- Android-Kotlin-抽象类与多态的表现
选择包名,然后右键: 选择Class类型,会有class: 选择File类型,不会自动有class: 目录结构: 定义描述抽象类 Person人类: package cn.kotlin.kotlin ...
- .net core 使用 AspectCore 实现简易的AopCache。
(第一次写博客,好紧张!!!) 源码地址:传送门 项目中有很多缓存的需求,能自己定义缓存key和时间,能根据key去清理缓存. 网上找了一圈,有很多基于aop的缓存组件,但是都不满足我的需求.故造了个 ...
- C# 简单反射实现winform左侧树形导航,右侧切换内容
先看看效果: 核心代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
- 用WPF写一个登录界面,我想在输入完密码后按回车就能够验证登陆,而不需要用鼠标单击登陆按钮
在wpf中,将按钮的IsDefault设置为true
- 【转】PowerDesigner快捷键
一般快捷键 快捷键 说明 F4 打开检查模型窗口,检查模型 F5 如果图窗口内的图改变过大小,恢复为原有大小即正常大小 F6 放大图窗口内的图 F7 缩小图窗口内的图 F8 在图窗口内中查看全部图内容 ...