一)jQuery常用AJAX-API

目的:简化客户端与服务端进行局部刷新的异步通讯

(1)取得服务端当前时间

  简单形式:jQuery对象.load(url)

  返回结果自动添加到jQuery对象代表的标签中间 如果是Servlet的话,采用的是GET方式,如下

前台:

  1. <body>
  2. 当前时间:<span id="time"></span><br/>
  3. <input type="button" value="获取时间"/>
  4. <script type="text/javascript">
  5. $(":button").click(function(){
  6. var url="${pageContext.request.contextPath}/TServlet?time="+new Date().getTime();
  7. $("#time").load(url);
  8. });
  9. </script>
  10. </body>

后台

  1. public class TServlet extends HttpServlet {
  2. public void doGet(HttpServletRequest request, HttpServletResponse response)
  3. throws ServletException, IOException {
  4. System.out.println("GET方式");
  5. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  6. String str=sdf.format(new Date());
  7. response.setContentType("text/html;charst=utf-8");
  8. PrintWriter pw=response.getWriter();
  9. pw.write(str);
  10. pw.flush();
  11. pw.close();
  12. }
  13.  
  14. public void doPost(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. System.out.println("Post方式");
  17. }
  18.  
  19. }

效果如下:

复杂形式:jQuery对象.load(url,sendData,function(backData,textStatus,ajax){... ...})

sendData = {"user.name":"jack","user.pass":"123"};

以JSON格式文本方式发送,使用POST方式发送,服务端能收到数据

前台这个时候如下

  1. $(":button").click(function(){
  2. var url="${pageContext.request.contextPath}/TServlet?time="+new Date().getTime();
  3. //参数二以json的方式发送
  4. var sendDate={
  5. "name" : "郭庆兴",
  6. "age" : 21
  7. };
  8. $("#time").load(url,sendDate);
  9. });

后台servlet:

  1. public class TServlet extends HttpServlet {
  2. public void doGet(HttpServletRequest request, HttpServletResponse response)
  3. throws ServletException, IOException {
  4. System.out.println("GET方式");
  5. }
  6.  
  7. public void doPost(HttpServletRequest request, HttpServletResponse response)
  8. throws ServletException, IOException {
  9. System.out.println("Post方式");
  10. String name=request.getParameter("name");
  11. int age=Integer.parseInt(request.getParameter("age"));
  12. System.out.println(name+":"+age);
  13. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  14. String str=sdf.format(new Date());
  15. response.setContentType("text/html;charst=utf-8");
  16. response.setCharacterEncoding("UTF-8");
  17. PrintWriter pw=response.getWriter();
  18. pw.write(str+" 测试:"+name+":"+age);
  19. pw.flush();
  20. pw.close();
  21. }
  22. }

效果如下

总结

(1)、对于load方法而言,如果请求体无参数发送的话,load方法采用GET方式提交;如果请求体有参数发送的话,load方法采用POST方式提交

(2)、使用load方法时,自动进行编码,服务器端接收无需手工编码。

前台也可以这样写

  1. <script type="text/javascript">
  2. $(":button").click(function(){
  3. var url="${pageContext.request.contextPath}/TServlet?time="+new Date().getTime();
  4. //参数二以json的方式发送
  5. var sendDate={
  6. "name" : "郭庆兴",
  7. "age" : 21
  8. };
  9. $("#time").load(url,sendDate,function(backData,textStatus,xmlHttpRequest){
  10. //回调函数中参数一:backData表示返回的数据,它是js对象
  11. //回调函数中参数二:textStatus表示返回状态的文本描述,例如:success,error,
  12. //回调函数中参数三:xmlHttpRequest表示ajax中的核心对象
  13. alert(backData);
  14. });
  15. });</script>

(2)、jquery的get和post方法

$.get(url,sendData,function(backData,textStatus,ajax){... ...})

$.post(url,sendData,function(backData,textStatus,ajax){... ...})

如检查注册用户名和密码是否存在

前台:

  1. <body>
  2. <!--
  3. 在异步提交的方式下,form标签的action和method属性没有意义
  4. -->
  5. <form action="" method="GET">
  6. <table border="2" align="center">
  7. <tr>
  8. <th>用户名</th>
  9. <td><input type="text" name="username"/></td>
  10. </tr>
  11. <tr>
  12. <th>密码</th>
  13. <td><input type="password" name="password"/></td>
  14. </tr>
  15. <tr>
  16. <td colspan="2" align="center">
  17. <input type="button" value="检查" style="width:111px"/>
  18. </td>
  19. </tr>
  20. </table>
  21. </form>
  22. <center><span></span></center>
  23. <script type="text/javascript">
  24. $(":button").click(function(){
  25. var userName=$(":text").val();
  26. var password=$(":password").val();
  27. var url="${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();
  28. //参数二以json的方式发送
  29. var sendDate={
  30. "userName" : userName,
  31. "password" : password
  32. };
  33. $.post(url,sendDate,function(backDate){
  34. //转为jquery对象
  35. var $img=$("<img src='img/"+backDate+"' width='14px' height='14px' />")
  36. //插如图片,先清空
  37. $("span").html("");
  38. $("span").append($img);
  39. })
  40. });
  41. </script>
  42. </body>

后台

  1. public class UserServlet extends HttpServlet {
  2.  
  3. public void doGet(HttpServletRequest request, HttpServletResponse response)
  4. throws ServletException, IOException {
  5. String userName = request.getParameter("userName");
  6. String password = request.getParameter("password");
  7. System.out.println(userName);
  8. String tip = "error.gif";
  9. if("张三".equals(userName) && "111".equals(password)){
  10. tip = "right.gif";
  11. }
  12. response.setContentType("text/html;charset=UTF-8");
  13. PrintWriter pw = response.getWriter();
  14. pw.write(tip);
  15. pw.flush();
  16. pw.close();
  17. }
  18. public void doPost(HttpServletRequest request, HttpServletResponse response)
  19. throws ServletException, IOException {
  20. this.doGet(request, response);
  21. }
  22. }

但注意,我们可以简化对数据的封装,毕竟每一次从表单中取数据再一一对应成json格式过于麻烦,jquery提供了jQuery对象.serialize()。

作用:自动生成JSON格式的文本

注意:为每个jQuery对象设置一个name属性,因为name属性会被认为请求参数名,如前台和后台:

  1. <td><input type="text" name="userName"/></td>
  1. String userName = request.getParameter("userName");

注意:必须用<form>标签元素

适用:如果属性过多,强烈推荐采用这个API

前台可以这样写了

  1. <script type="text/javascript">
  2. $(":button").click(function(){
  3. var userName=$(":text").val();
  4. var password=$(":password").val();
  5. var url="${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();
  6. //参数二以json的方式发送
  7. /* var sendDate={
  8. "userName" : userName,
  9. "password" : password
  10. }; */
  11. var sendDate=$("form").serialize();
  12. $.post(url,sendDate,function(backDate){
  13. //转为jquery对象
  14. var $img=$("<img src='img/"+backDate+"' width='14px' height='14px' />")
  15. //插如图片,先清空
  16. $("span").html("");
  17. $("span").append($img);
  18. })
  19. });
  20. </script>

效果如下

(3)、jQuery解析XML

在webroot下建立一个city.xml文档

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3. <city>黄石</city>
  4. <city>武汉</city>
  5. <city>深圳</city>
  6. <city>荆州</city>
  7. <city>上海</city>
  8. </root>

接着就可以写前台的信息了

  1. <body>
  2. <input type="button" value="解析服务器的xml文件"/>
  3. <script type="text/javascript">
  4. $(":button").click(function(){
  5. var url="${pageContext.request.contextPath}/city.xml?time="+new Date().getTime();
  6. var sendDate=null;
  7. $.get(url,sendDate,function(backDataXml){
  8. //用jquery中的api解析xml文件,这时的xmnl是js对象
  9. var $xml=$(backDataXml).find("city");
  10. //迭代
  11. $xml.each(function(){
  12. var city=$(this).text();
  13. console.log(city);
  14. });
  15. });
  16. });
  17. </script>
  18. </body>

效果如下

(4)、省份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX

引入struts的必须jar包,同时还需要引入struts2-json-plugin-2.3.4.1.jar包,在web.xml中配置struts2的拦截器

  1. <!-- 引入struts核心过滤器 -->
  2. <filter>
  3. <filter-name>struts2</filter-name>
  4. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>struts2</filter-name>
  8. <url-pattern>/struts2/*</url-pattern>
  9. </filter-mapping>

前台代码如下:

  1. <body>
  2. 省份:<select id="provinceID" style="width: 120px">
  3. <option>选择省份</option>
  4. <option>湖北省</option>
  5. <option>广东省</option>
  6. <option>湖南省</option>
  7. </select>
  8.   
  9. 城市:<select id="cityID" style="width: 120px">
  10. <option>选择城市</option>
  11. </select>
  12. <script type="text/javascript">
  13. $('#provinceID').change(function(){
  14. //清空还原测试下拉框的内容,排除第一项、:gt(n)匹配所有大于n值的元素 remove()从DOM中删除所有匹配的元素。
  15. $("#cityID option:gt(0)").remove();
  16. //获取选中的省份
  17. var province=$("#provinceID option:selected").text();
  18. //如果选中的不是“选择省份”,就要处理
  19. if ("选择省份" != province) {
  20. $.ajax({
  21. type : "POST",
  22. url : "${pageContext.request.contextPath}/struts2/findCity?time="+new Date().getTime(),
  23. data : { "province" : province },
  24. success : function(backDate,textStatus,ajax){
  25. //解析json文本
  26. var array=backDate.setCity;
  27. for (var i = 0; i < array.length; i++) {
  28. var city=array[i];
  29. var $option=$("<option>"+city+"</option>");
  30. //alert(city);
  31. $("#cityID").append($option);
  32. }
  33. }
  34. });
  35. }
  36. });
  37. </script>
  38. </body>

后台:1、Action

  1. public class ProvinceAction extends ActionSupport {
  2. private String province;
  3. public void setProvince(String province) {
  4. this.province = province;
  5. }
  6. /**
  7. * 加入struts2-json-plugin-2.3.4.1.jar包后,程序会去遍历本action的get方法,同时将其封装为json
  8. */
  9. private Set<String> setCity;
  10. public Set<String> getSetCity() {
  11. return setCity;
  12. }
  13. //根据省份查城市
  14. public String findCity() throws Exception {
  15. setCity=new LinkedHashSet<String>();
  16. System.out.println(province);
  17. if ("湖北省".equals(province)) {
  18. setCity.add("武汉");
  19. setCity.add("黄石");
  20. setCity.add("荆州");
  21. setCity.add("襄阳");
  22. setCity.add("宜昌");
  23. }else if ("湖南省".equals(province)) {
  24. setCity.add("长沙");
  25. setCity.add("株洲");
  26. setCity.add("萍乡");
  27. setCity.add("湘潭");
  28. setCity.add("岳阳");
  29. }else if ("广东省".equals(province)) {
  30. setCity.add("广州");
  31. setCity.add("深圳");
  32. setCity.add("中山");
  33. setCity.add("佛山");
  34. setCity.add("汕头");
  35. setCity.add("珠海");
  36. }
  37. return SUCCESS;
  38. }
  39. }

2、struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <!DOCTYPE struts PUBLIC
  4. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  5. "http://struts.apache.org/dtds/struts-2.3.dtd">
  6.  
  7. <struts>
  8. <!-- extends="json-default" 继承自struts2-json-plugin-2.3.4.1.jar/struts-plugin.xml文件中的
  9. <package name="json-default" extends="struts-default"> -->
  10. <package name="province" extends="json-default" namespace="/"
  11. abstract="false">
  12.  
  13. <action name="findCity" class="com.gqx.test1.ProvinceAction"
  14. method="findCity">
  15. <result name="success" type="json"></result>
  16. </action>
  17. </package>
  18. </struts>

效果如下:

AJAX(Jquery)的更多相关文章

  1. 如何使用ajax(jquery)

    以下是我第一次工作时写的ajax: $.ajax({ url: "/spinweb/store/storeHome.do", dataType: 'json', data: { & ...

  2. JQuery中的Ajax(六)

    一:Ajax请求jQuery.ajax(options) load(url,[data],[callback])jQuery.get(url,[data],[callback]) jQuery.get ...

  3. jQuery学习笔记之jQuery的Ajax(3)

    jQuery学习笔记之jQuery的Ajax(3) 6.jQuery的Ajax插件 源码地址: https://github.com/iyun/jQueryDemo.git ------------- ...

  4. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  5. Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

    1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...

  6. Struts2处理(jQuery)Ajax请求

    1. Ajax     Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...

  7. Servlet处理(jQuery)Ajax请求

    1. jQuery     jQuery是一个JavaScript函数库,极大的简化了JavaScript编程,很容易学习.jQuery是目前最流行的开源js框架,并且提供了大量的扩展. 2. Aja ...

  8. Ajax的使用(jquery的下载)

    Ajax学习笔记(jquery的下载) JQuery的官网下载 地址:http://jquery.com 右上角的"Download JQuery" 三个可供下载的文件: Prod ...

  9. 框架----Django之Ajax全套实例(原生AJAX,jQuery Ajax,“伪”AJAX,JSONP,CORS)

    一.原生AJAX,jQuery Ajax,“伪”AJAX,JSONP 1. 浏览器访问 http://127.0.0.1:8000/index/ http://127.0.0.1:8000/fake_ ...

随机推荐

  1. Android学习指南之三十八:Android手势操作编程[转]

    手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中 ...

  2. 基础总结篇之一:Activity生命周期[转]

    from:http://blog.csdn.net/liuhe688/article/details/6733407   基础总结篇之一:Activity生命周期 子曰:溫故而知新,可以為師矣.< ...

  3. (转)eclipse下配置tomcat7的几个重要问题,值得一看

    转自:http://jingyan.baidu.com/article/ab69b270ccc4792ca7189fd6.html 这段时间开始接触的servlet,今天尝试在eclipse下配置to ...

  4. android Activity中设置setResult 没有触发onActivityResult

    昨天修改<manifest 文件中activity 的 模式为单例模式:android:launchMode="singleTask" ,发现我的onActivityResu ...

  5. poj 3264 区间最大最小值 RMQ问题之Sparse_Table算法

    Balanced Lineup Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , %I64u Java ...

  6. 如何实现php手机短信验证功能

    http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1677 下载php源代码 现在网站在建设网 ...

  7. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  8. cudnn 安装步骤

    上官网下载对应的cudnn https://developer.nvidia.com/cudnn 下载完cudnn后,命令行输入文件所在的文件夹 (ubuntu为本机用户名) cd home/ubun ...

  9. python- 动态加载目录下所有的类

    # 背景 自动化测试框架中model层下有很多类,用来操作mysql的,使用的时候需要把全部的类加载进来,需要使用到动态加载类 # 解决方法 使用pkgutil,内置的方法,常用的话有两个方法 ite ...

  10. Bs4 BeautifulSoup取值

    原文网址:https://blog.csdn.net/u010244522/article/details/79627073 从网页获取HTML数据后,获取对应标签.属性的值 取值方法主要有以下几种: ...