博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ajax使用进阶
阅读量:6161 次
发布时间:2019-06-21

本文共 4564 字,大约阅读时间需要 15 分钟。

       关于Ajax的概念不再做解释了,我想通过三个小例子来让大家对Ajax有个清晰的认识。要学习它,必须从最基础最原始的方式开始认识,然后通过使用框架来提升效率,逐步认识它。

一.原生js版(注册的用户名是否重复的校验)

前端js代码:

 后台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的操作,是不是简单了许多)

$(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("
"+value); }); } }); });

 

后台可以使用Servlet处理,将得到的结果使用Gson转换为json形式返回给客户端:

public class AutoServlet extendsHttpServlet {       public void doGet(HttpServletRequest request, HttpServletResponse response)                     throwsServletException, IOException {              List
names = new ArrayList
(); 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代码

Insert titlehere
服务器端Java代码:
public class Demo1 {    List
citys1 = new ArrayList
(); List
citys2 = new ArrayList
(); List
citys3 = new ArrayList
(); Map
> cityMap = new HashMap
>(); 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
findCity(int id ){ if(cityMap.containsKey(id)){ returncityMap.get(id); } return null; }}

后台的代码就是如此,servlet不需要了,返回的结果也不需要转换了,看起来就像在客户端直接调用服务器端java代码一样.

 

但是多了些配置和引用:

1.      web.xml的配置

2.      dwr.xml的配置

3.      自动生成的js脚本的引用(需要先注入)

 

 

    我们会发现,所谓的框架,不过是封装了一些繁杂无味的机械化操作,将这些平时会重复使用的部分写好,把变化的部分提炼出来,以配置的形式让人修改,达到的效果是相同的,但开发的效率却大大提高。就像所有的Ajax框架和组件一样,底层的操作少不了,你不需要做,但你得知道有这么一出,这就是基本原理。

转载于:https://www.cnblogs.com/lucare/p/9312702.html

你可能感兴趣的文章
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
图解SSH原理及两种登录方法
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
JS图片跟着鼠标跑效果
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
416. Partition Equal Subset Sum
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>