一)jQuery常用AJAX-API

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

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

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

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

前台:

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

后台

public class TServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("GET方式");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String str=sdf.format(new Date());
		response.setContentType("text/html;charst=utf-8");
		PrintWriter pw=response.getWriter();
		pw.write(str);
		pw.flush();
		pw.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("Post方式");
	}

}

效果如下:

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

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

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

前台这个时候如下

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

后台servlet:

public class TServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("GET方式");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("Post方式");
		String name=request.getParameter("name");
		int age=Integer.parseInt(request.getParameter("age"));
		System.out.println(name+":"+age);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String str=sdf.format(new Date());
		response.setContentType("text/html;charst=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.write(str+"  测试:"+name+":"+age);
		pw.flush();
		pw.close();
	}
}

效果如下

总结

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

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

前台也可以这样写

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

(2)、jquery的get和post方法

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

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

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

前台:

<body>
	<!--
		在异步提交的方式下,form标签的action和method属性没有意义
	-->
	<form action="" method="GET">
		<table border="2" align="center">
			<tr>
				<th>用户名</th>
				<td><input type="text" name="username"/></td>
			</tr>
			<tr>
				<th>密码</th>
				<td><input type="password" name="password"/></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="button" value="检查" style="width:111px"/>
				</td>
			</tr>
		</table>
	</form>
	<center><span></span></center>
	<script type="text/javascript">
    	$(":button").click(function(){
    		var userName=$(":text").val();
    		var password=$(":password").val();
    		var url="${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();
    		//参数二以json的方式发送
    		var sendDate={
    			"userName" : userName,
    			"password" : password
    		};
    		$.post(url,sendDate,function(backDate){
    			//转为jquery对象
    			var $img=$("<img src='img/"+backDate+"' width='14px' height='14px' />")
    			//插如图片,先清空
    			$("span").html("");
    			$("span").append($img);
    		})
    	});
    </script>
</body>

后台

public class UserServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String userName = request.getParameter("userName");
		String password = request.getParameter("password");
		System.out.println(userName);
		String tip = "error.gif";
		if("张三".equals(userName) && "111".equals(password)){
			tip = "right.gif";
		}
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter pw = response.getWriter();
		pw.write(tip);
		pw.flush();
		pw.close();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

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

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

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

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

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

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

前台可以这样写了

<script type="text/javascript">
    	$(":button").click(function(){
    		var userName=$(":text").val();
    		var password=$(":password").val();
    		var url="${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();
    		//参数二以json的方式发送
    		/* var sendDate={
    			"userName" : userName,
    			"password" : password
    		}; */
    		var sendDate=$("form").serialize();
    		$.post(url,sendDate,function(backDate){
    			//转为jquery对象
    			var $img=$("<img src='img/"+backDate+"' width='14px' height='14px' />")
    			//插如图片,先清空
    			$("span").html("");
    			$("span").append($img);
    		})
    	});
</script>

效果如下

(3)、jQuery解析XML

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

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<city>黄石</city>
	<city>武汉</city>
	<city>深圳</city>
	<city>荆州</city>
	<city>上海</city>
</root>

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

<body>
	<input type="button" value="解析服务器的xml文件"/>
	<script type="text/javascript">
    	$(":button").click(function(){
    		var url="${pageContext.request.contextPath}/city.xml?time="+new Date().getTime();
    		var sendDate=null;
    		$.get(url,sendDate,function(backDataXml){
    			//用jquery中的api解析xml文件,这时的xmnl是js对象
    			var $xml=$(backDataXml).find("city");
    			//迭代
    			$xml.each(function(){
    				var city=$(this).text();
    				console.log(city);
    			});
    		});
    	});
    </script>
</body>

效果如下

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

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

<!-- 引入struts核心过滤器 -->
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/struts2/*</url-pattern>
  </filter-mapping>

前台代码如下:

<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">
    	$('#provinceID').change(function(){
    		//清空还原测试下拉框的内容,排除第一项、:gt(n)匹配所有大于n值的元素  remove()从DOM中删除所有匹配的元素。
    		$("#cityID option:gt(0)").remove();
    		//获取选中的省份
    		var province=$("#provinceID option:selected").text();
    		//如果选中的不是“选择省份”,就要处理
    		if ("选择省份" != province) {
				$.ajax({
				type       :  "POST",
				url		   :  "${pageContext.request.contextPath}/struts2/findCity?time="+new Date().getTime(),
				data	   :  { "province" : province },
				success    :  function(backDate,textStatus,ajax){
									//解析json文本
									var array=backDate.setCity;
									for (var i = 0; i < array.length; i++) {
										var city=array[i];
										var $option=$("<option>"+city+"</option>");
										//alert(city);
										$("#cityID").append($option);
									}
								}
				});
			}
    	});
    </script>
</body>

后台:1、Action

public class ProvinceAction extends ActionSupport {
	private String province;
	public void setProvince(String province) {
		this.province = province;
	}
	/**
	 * 加入struts2-json-plugin-2.3.4.1.jar包后,程序会去遍历本action的get方法,同时将其封装为json
	 */
	private Set<String> setCity;
	public Set<String> getSetCity() {
		return setCity;
	}
	//根据省份查城市
	public String findCity() throws Exception {
		setCity=new LinkedHashSet<String>();
		System.out.println(province);
		if ("湖北省".equals(province)) {
			setCity.add("武汉");
			setCity.add("黄石");
			setCity.add("荆州");
			setCity.add("襄阳");
			setCity.add("宜昌");
		}else if ("湖南省".equals(province)) {
			setCity.add("长沙");
			setCity.add("株洲");
			setCity.add("萍乡");
			setCity.add("湘潭");
			setCity.add("岳阳");
		}else if ("广东省".equals(province)) {
			setCity.add("广州");
			setCity.add("深圳");
			setCity.add("中山");
			setCity.add("佛山");
			setCity.add("汕头");
			setCity.add("珠海");
		}
		return SUCCESS;
	}
}

2、struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- extends="json-default" 继承自struts2-json-plugin-2.3.4.1.jar/struts-plugin.xml文件中的
		<package name="json-default" extends="struts-default"> -->
	<package name="province" extends="json-default" namespace="/"
		abstract="false">

		<action name="findCity" class="com.gqx.test1.ProvinceAction"
			method="findCity">
			<result name="success" type="json"></result>
		</action>
	</package>
</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. multiprocessing、threading、gevent区别

    1. 进程是资源分配的单位 2. 线程是操作系统调度的单位 3. 进程切换需要的资源很最大,效率很低 4. 线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下) 5. 协程切换任务资源很小 ...

  2. What's New In Python 3.X

    As Python updating to python 3.6, its performance is better than Python 2.x, which is good news to e ...

  3. mysql同时使用order by和limit查询时的一个严重隐患 -- 丢失数据

    转自: https://blog.csdn.net/tsxw24/article/details/44994835 我经常使用order by和limit来做数据分页显示并排序,一直也没发现过什么问题 ...

  4. spark图解

    导语 spark 已经成为广告.报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到大家的青睐,我自己最近半年在接触spark以及spark streaming之后,对spa ...

  5. 主题模型之潜在语义分析(Latent Semantic Analysis)

    主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...

  6. 修改apche的端口号为80后,重启不成功,怎么办

    修改为80后提示如下 Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' f ...

  7. 关于CentOS下 yum包下载下的rpm包放置路径

    在CentOS下用yum安装,回发现在/var/cache/yum/下的base.extrs和updates下的packages下都没有发现下载的RPM 原来在/etc/yum.conf下没有设置下载 ...

  8. A - Class Statistics

    A - Class Statistics Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Subm ...

  9. cxGrid用法-最新

    cxGrid用法-最新 在做AdoHelper实用程序的时候,我用了DevExpress的cxGrid控件.在此之前用的是dbgrid,考虑到不能把所有的数据都拉到本地,我用了动态生成的select ...

  10. iOS_URI跳转方式多种地图导航的代码实践

    先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表. 当然,如果没有安装某个地图APP,那么对应的选项是不会出现的.检测APP是否安装,只要调用下面这个方法就可以了 [[UI ...