Ajax使用进阶
关于Ajax的概念不再做解释了,我想通过三个小例子来让大家对Ajax有个清晰的认识。要学习它,必须从最基础最原始的方式开始认识,然后通过使用框架来提升效率,逐步认识它。
一.原生js版(注册的用户名是否重复的校验)
前端js代码:
<script type="text/javascript">
var xmlHttpRequest;
function createXmlHttpRequest(){
if(window.ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
return new XMLHttpRequest();
}
}
function request(){
var uname = document.getElementById("username").value;
if(uname==""){//用户名为空则不作判断是否存在
return;
}
//请求字符串
var url = " CheckUserServlet";
//1创建XMLHttpRequest组件
xmlHttpRequest = createXmlHttpRequest();
//2设置回调函数
xmlHttpRequest.onreadystatechange = handle;
//3初始化XMLHttpRequest组件
xmlHttpRequest.open("POST",url,true);
//4.设置请求头(post类型需要)
xmlHttpRequest.send(null);
xmlHttpReq.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
//5.发送请求
xmlHttpReq.send("username=" + uname);
}
function handle(){
if(xmlHttpRequest.readyState==4
&&xmlHttpRequest.status==200 ){
var b = xmlHttpRequest.responseText;
//alert(b);
if(b=="true"){
document.getElementById("result").innerHTML="用户名已存在";
}else{
document.getElementById("result").innerHTML="用户名可以使用";
}
}
}
</script>
后台servlet查找用户表
public class CheckUserServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponseresponse)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
PrintWriter out = response.getWriter();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/wp","root","root");
PreparedStatement ps = con.prepareStatement("select * from user where u_name='"+username+"'");
ResultSet rs = ps.executeQuery();
if(rs.next()){
out.println("true");
}else{
out.println("false");
}
con.close();
out.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
二.JQuery框架版(一个搜索框的自动补全)
前端js代码(使用了jQuery框架,封装了对Ajax的操作,是不是简单了许多)
<scripttype="text/javascript">
$(document).ready(function() {
$('#query').keyup(function() {
reg=/^[a-z|A-Z|0-9]/;//以字母或者数字开头的不予响应
if(reg.test($('#query').val()))return;
$.ajax({
url: 'AutoServlet?body='+$('#query')[0].value,
type: 'GET',
dataType: 'json', //以json形式返回
timeout: 2000,
cache: false,
error: erryFunction, //错误执行方法
success: succFunction //成功执行方法
})
function erryFunction() {
alert("error");
}
function succFunction(data) {
$.each(data, function (index, value) { //遍历
$("#auto").append("<br>"+value);
});
}
});
});
</script>
后台可以使用Servlet处理,将得到的结果使用Gson转换为json形式返回给客户端:
public class AutoServlet extendsHttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
List<String> names = new ArrayList<String>();
String body = request.getParameter("body");
body = new String(body.getBytes("ISO-8859-1"),"UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriterout = response.getWriter();
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/wp","root","root");
PreparedStatement ps = con.prepareStatement("select distinct (name) from book where namelike '%"+body+"%'");
ResultSet rs = ps.executeQuery();
while(rs.next()){
names.add(rs.getString("name"));
}
con.close();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
//使用谷歌的gson转换成json
Gson gson = new Gson();
String jsonString = gson.toJson(names);
out.println(jsonString);
out.close();
}
}
三.快捷式DWR版(省市二级联动)
前端js和html代码
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert titlehere</title>
<script type='text/javascript'src='/TestDWR/dwr/interface/MyDemo.js'></script>
<script type='text/javascript'src='/TestDWR/dwr/engine.js'></script>
<script type='text/javascript'src='/TestDWR/dwr/util.js'></script>
<script type="text/javascript">
function change(pro){
MyDemo.findCity(pro,callback);
}
function callback(data){
DWRUtil.removeAllOptions("city");
DWRUtil.addOptions("city",data,"id","name");
}
</script>
</head>
<body>
<select id="pro"onchange="change(this.value)">
<option value="1">湖北省</option>
<option value="2">湖南省</option>
<option value="3">山东省</option>
</select>
<select id="city"></select>
</body>
</html>
服务器端Java代码:
public class Demo1 {
List<City> citys1 = new ArrayList<City>();
List<City> citys2 = new ArrayList<City>();
List<City> citys3 = new ArrayList<City>();
Map<Integer,List<City>> cityMap = new HashMap<Integer, List<City>>();
public Demo1(){
citys1.add(new City(100,"武汉市"));
citys1.add(new City(101,"宜昌市"));
citys1.add(new City(102,"仙桃市"));
citys1.add(new City(103,"黄冈市"));
citys2.add(new City(200,"长沙市"));
citys2.add(new City(201,"株洲市"));
citys2.add(new City(202,"岳阳市"));
citys2.add(new City(203,"湘潭市"));
citys3.add(new City(300,"烟台市"));
citys3.add(new City(301,"青岛市"));
citys3.add(new City(302,"秦皇岛市"));
cityMap.put(1,citys1);
cityMap.put(2,citys2);
cityMap.put(3,citys3);
}
public List<City> findCity(int id ){
if(cityMap.containsKey(id)){
returncityMap.get(id);
}
return null;
}
}
后台的代码就是如此,servlet不需要了,返回的结果也不需要转换了,看起来就像在客户端直接调用服务器端java代码一样.
但是多了些配置和引用:
1. web.xml的配置
2. dwr.xml的配置
3. 自动生成的js脚本的引用(需要先注入)
我们会发现,所谓的框架,不过是封装了一些繁杂无味的机械化操作,将这些平时会重复使用的部分写好,把变化的部分提炼出来,以配置的形式让人修改,达到的效果是相同的,但开发的效率却大大提高。就像所有的Ajax框架和组件一样,底层的操作少不了,你不需要做,但你得知道有这么一出,这就是基本原理。
Ajax使用进阶的更多相关文章
- Ajax的进阶学习(二)
JSON和JSONP 如果在同一个域下,$.ajax()方法只要设置dataType属性即可加载JSON文件.而在非同域下,可以使用JSONP,但也是有条件的. Ajax进阶.html: <!D ...
- Ajax的进阶学习(一)
在Ajax课程中,我们了解了最基本的异步处理方式.本章,我们将了解一下Ajax的一些全局请求事件.跨域处理和其他一些问题. 加载请求 在Ajax异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长 ...
- python学习-- django 2.1.7 ajax 请求 进阶版
#原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版 $.get(&qu ...
- AJAX学习必备三本书
<AJAX基础教程>AJAX必备图书之一.国内发行的第一本AJAX图书,也是目前最好的AJAX入门书,如果您是AJAX新手,此书是最好的入门图书.本书基本包括了实现Ajax需要了解的大部分 ...
- Servlet处理(jQuery)Ajax请求
1. jQuery jQuery是一个JavaScript函数库,极大的简化了JavaScript编程,很容易学习.jQuery是目前最流行的开源js框架,并且提供了大量的扩展. 2. Aja ...
- jQuery 知识体系
jQuery基础知识一 jQuery之知识二-选择器 [jQuery知识]jQuery之知识三-过滤器 [jQuery知识]jQuery之知识四-DOM和CSS操作 [jQuery知识]jQuery之 ...
- Ajax 整理总结(进阶)
Ajax 进阶学习要点:1.加载请求2.错误处理3.请求全局事件4.JSON 和 JSONP5.jqXHR 对象 一.加载请求 在 Ajax 异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长的 ...
- jQuery基础---Ajax进阶
原文:jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一 ...
- javascript进阶之AJAX
AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...
随机推荐
- 【Android】完善Android学习(六:API 4.0)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- redis linux下的开机启动
redis linux下的环境搭建 http://www.cnblogs.com/zsg88/p/8321644.html 安装完redis-4.0.1后设置linux开机自启动. 1.在re ...
- python实现备份gitlab版本库并更改文件名
脚本的功能是实现备份gitlab版本库,并修改备份后的文件名,成功后发送邮件至相关负责人,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- impo ...
- 利用forEach循环Dom元素…
大家都知道forEach是循环数组用的,而且很方便,可以丢掉for循环了,但是它不能循环Dom元素.其实我们可以利用call来完成forEach循环Dom; 假设有这样的HTML结构: <ul ...
- 选择Asp for javascript,非.net。
写Web类型的程序我使用过的服务器端语言有C#和Python.PHP稍Copy过几段代码,Asp很早听说过.C#我主要用来写Web服务比较多,C#这种强类型语言写Web不太爽,特别构造复杂的JSON数 ...
- unity ugui消息透传
公司要做一个这东西. A是滑动区域,ScrollRect组件. B是各种选项. C是拾取到鼠标(或触点)的选项. D是拖放区域. 大概要求是这样. 因为B的条目很多,放在A里可以滑动查看.如果要选择一 ...
- SSL 证书类型说明: DV OV EV
内容来自: ssl 证书的三种类型: dv (域名型) , ov (企业型) 和 ev (扩展型) OV.DV和EV证书的区别 另外: 浏览器兼容性测试报告 Symantec 证书为什么相比其他证书要 ...
- 每个 Java 开发者都应该知道的 5 个注解
自 JDK5 推出以来,注解已成为Java生态系统不可缺少的一部分.虽然开发者为Java框架(例如Spring的@Autowired)开发了无数的自定义注解,但编译器认可的一些注解非常重要. 在本文中 ...
- 阿里云服务器部署笔记二(python3、Flask、uWSGI、Nginx)
从git上把项目拉到服务器,项目可以在服务器上运行后,就只需要配置uwsgi和nginx了.它们的逻辑关系是:外部请求->nginx->uwsgi->项目实例. 一.配置uwsgi ...
- MVC4 AspNet MVC下的Ajax / 使用JQuery做相关的Ajax请求
源码参考:链接:http://pan.baidu.com/s/1pKhHHMj 密码:mkr4 1:新建-->项目-->Web-->ASP.NET MVC 4 Web 应用程序.命 ...