AJAX的使用

Ajax的介绍

Ajax(asynchronous javascript and xml)异步的javascript and xml
ajax技术是七种技术的综合
(xml javascript xmlhttprequest(核心) css dom xstl dhtml)

Ajax引擎是内嵌到浏览器
该ajax引擎可以理解成就是xmlhttprequest。

Ajax应用场景

1.动态加载数据,按需获取数据(树形菜单、联动菜单)
2.改善用户体验(输入内容钱提示,带进度条文件上传)
3.电子商务应用(购物车,邮件订阅)
4.访问第三方服务(访问搜索服务,rss阅读器)

①验证用户名是否可用

创建一个XmlHttpRequest对象

	//该函数用于获得一个XmlHttpRequest对象
	function getXmlHttpRequest(){
		var http_request;
		//创建http_request对象 (XMLHttpRequest)不同的浏览器创建的方法不一样
		if(window.ActiveXObject){
			//ie内核
			http_request=new ActiveXObject("Microsoft.XMLHTTP");
		}else{
			//非ie内核
			http_request=new XMLHttpRequest();
		}
		//可以验证(js中非null为真,null就为假)
		if(http_request){
			return http_request;
		}else{
			return null;			
		}
		
	}

使用open函数打开请求

//先打开一个请求
	//GET表示请求的方式是GET,也可以是POST
	//第二个参数是:向哪个资源(Servlet/Action/jsp)发请求
	//第三个参数:true支持异步,false表示不支持异步	
	//得到用户输入的用户名
	var username=document.getElementById("username").value;		
	//window.alert("/ajax/MyServlet?name="+username);	
	myHttpRequest.open("GET","/ajax/MyServlet?name="+username,true);

指定由哪个函数处理服务器回送的结果(指定由哪个函数处理xmlhttprequest对象发生)

//指定处理服务器返回的结果的函数是谁
		//chuli表示一个函数名
		myHttpRequest.onreadystatechange=chuli;

发送

		//发送到请求,如果是GET请求,则send函数不能发送内容提
		//如果是POST请求,则send函数要发送内容提
		myHttpRequest.send();

写servlet的代码

Servlet代码主要是用于去相应ajax的请求,这里我们需要注意的是
①返回的数据格式可以是text,

response.setContentType("text/html;charset=utf-8");

②如果返回的数据格式是xml的

response.setContentType("text/xml;charset=utf-8");

③为了防止浏览器读缓存,最好加上

response.setHeader("Cache-Control", "no-cache");

servlet代码的基本模板是

response.setCharacterEncoding("UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		PrintWriter out=response.getWriter();
		//1.先看看能否接收到ajax发送的请求
		String username=request.getParameter("name");
		out.write(“结果文本”);
		out.close();

②省市联动

使用ajax技术

POST发送 XML传递

function showCity(){
		myHttpRequest=getXmlHttpRequest();
		if(myHttpRequest==null){
			window.alert("创建xmlhttprequest对象失败");
			return ;
		}
		
		
		var url="/ajaxcity/ShowCityC1";//使用POST方式提交
		myHttpRequest.open("POST",url,true);
		//告诉服务器,这次提交时POST方法,http请求有内容体
		myHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		myHttpRequest.onreadystatechange=chuli;
		//得到用户选择的省份
		var province=document.getElementById("province").value;
		//window.alert(province);
		myHttpRequest.send("province="+province);
		
		
	}

处理数据

if(myHttpRequest.readyState==4){
			//成功完成
			if(myHttpRequest.status==200){
				var cities=myHttpRequest.responseXML.getElementsByTagName("city");
				//得到city元素节点
				var mycity=document.getElementById("city");
				//每次应该清空一下city元素下的option
				//①
				mycity.options.length=1;
				//②Element.childNodes得到节点树下的节点数组
				//如果不好理解就得到mycity所有子元素,然后删除
				//window.alert(cities.length);
				//js中把cities[i]
				for(var i=0;i<cities.length;i++){
					//js中把cities[i]称为node
					//window.alert(cities[i].firstChild.nodeValue);
					
					
					
					//创建一个option元素
					var cityoption=document.createElement("option");
					//给cityoption设置属性值
					cityoption.setAttribute("value",cities[i].firstChild.nodeValue);
					//再创建一个文本节点
					var cityoptiontext=document.createTextNode(cities[i].firstChild.nodeValue);
					//把该文件节点挂在到cityoption元素节点下
					cityoption.appendChild(cityoptiontext);
					//把cityoptiontext添加到city元素节点
					mycity.appendChild(cityoption);
					
				}
				//window.alert("服务器返回的是"+res);
			}
		}

讨论细节问题

①如果是GET提交

中文乱码

//转换中文乱码
	public static String changeEncoding(String str) {
		try {
			str=new String(str.getBytes("iso-8859-1"),"utf=8");
		} catch (Exception e) {
			// TODO: handle exception
		}
		return str;
	}

②使用POST方式提交

Post提交和get提交区别主要是体现在jsp页面,open方法不一样

myHttpRequest.open("POST","/ajax/MyServlet?name="+username,true);
		//添加指定格式的话,主要作用是告诉服务器,我提交内容是经过Url编码
		myHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//指定处理服务器返回的结果的函数是谁
		//chuli表示一个函数名
		myHttpRequest.onreadystatechange=chuli;
		//发送到请求,如果是GET请求,则send函数不能发送内容体
		//如果是POST请求,则send函数要发送内容体
		myHttpRequest.send("intro=我是一个好人&mail=hyf@qq.com");

如何选择使用Gei或post

如果数据量比较小,可以使用get
如果数据量比较大,又要保证安全,则使用post方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值