AJAX入门
来源:互联网 发布:微软人工智能框架 编辑:程序博客网 时间:2024/06/07 02:09
AJAX介绍
【1】AJAX简介
全称:Asynchronous IavaScript And XML(异步的JavaScript和XML)
AJAX就是通过JavaScript向服务器发送请求,并接收响应,然后我们在通过DOM修改页面。
XML指的是服务器响应的数据的格式。
目前AJAX 已经很少使用XML作为响应的格式。因为XML的解析性能及传输性能较差。AJAX可以响应txt、xml、json格式的数据。
【2】同步和异步
同步:当我们通过浏览器向服务器发送一个请求时,浏览器会刷新整个页面。
异步:当我们向服务器发送请求时,不是刷新整个页面,而是只刷新网页的一部分。
【3】XMLHttpRequest对象
我们AJAX的所有操作都是围绕着XMLHttpRequest对象进行。
在XMLHttpRequest对象中封装发送给服务器请求报文,同时在服务器发回响应时,响应信息也会在对象中封装。
如何获取XMLHttpRequest对象var xhr = new XMLHttpRequest();
【4】使用步骤
第一步:创建XMLHttpRequest对象;
大部分比较新的浏览器都支持的方式(IE7以上)
var xhr = new XMLHttpRequest();
IE6以下的浏览器
var xhr = new ActiveXObject(“Msxml2.XMLHTTP”);
IE5.5以下的浏览器
var xhr = new ActiveXObject(“Microsoft.XMLHTTP”);
通用的获取XMLHttpRequest对象的方法:
//写一个获取XHR的方法 function getXMLHttpRequest(){ try{ //大部分浏览器都支持的方式 return new XMLHttpRequest(); }catch(e){ try{ //IE6以下浏览器支持的方式 return new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ //IE5以下的浏览器 return new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ alert("你是火星来的吧!你的浏览器不支持AJAX!"); } } } }
第二步:设置请求信息(请求地址,请求方式,请求参数)
xhr.open(请求方式,请求地址);
在发送post请求时,还需要设置一个请求头,如下:
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
第三步:发送请求
xhr.send(请求体);
get请求没有请求体,所以send中可以传null或什么都不传。
post请求需要通过send来设置请求参数。
第四步:接收响应信息
//xhr绑定一个onreadystatechange响应函数,这个函数会在readyState属性发生改变时调用 xhr.onreadystatechange = function(){ //判断当前readyState是否为4 , 且响应状态码为200 if(xhr.readyState==4 && xhr.status==200){ //读取响应信息,做相关操作。 //如果信息为纯文本 var text=xhr.responseText; //如果信息为XML var xml=xhr.responseXML; } };
第五步:响应数据的格式
响应的格式有三种:txt、xml、json.
前端请求处理与后端请求处理
前端请求处理:就是在第二步设置请求信息时,请求地址为一个xml格式的文件或json格式的文件地址。
后端请求处理:设置请求信息时,请求地址为一个servlet的地址,在后台处理数据。
前端请求示例:
后端请求示例:
<title>省市联动效果</title><script type="text/javascript">/** * 1.在文档加载完毕时发送请求,得到所有省份名称显示在province中 2.在选择了新的省份时,发送请求,得到XML文档 3.解析xml文档,得到其中所有的<city>,在得到每个<city>元素的内容,即市名,使用市名生成<option>,插入到<select>中 */ function createXmlHttpRequest(){ try{ return new XMLHttpRequest();//大多数浏览器 }catch(e){ try{ return ActvieXObject("Msxml2.XmlHTTP");//IE6.0 }catch(e){ return ActvieXObject("Microsoft.XMLHTTP");//IE5.0 } } } window.onload=function(){ /** ajax四步,请求ProvinceServlet,得到所有省份名称 使用每个省份名称创建一个<option>元素,添加到<select name=province>中 */ var xmlHttp=createXmlHttpRequest(); xmlHttp.open("GET","/shengshiliandong/ProvinceServlet",true); //3.发送请求 xmlHttp.send(null);//get没有请求体,但也要给出null,不然Firefox可能会不能发送 //4.给异步对象的onreadystatechange事件注册监听器 xmlHttp.onreadystatechange=function(){ //双重判断:服务器响应结束和响应成功 if(xmlHttp.readyState==4 && xmlHttp.status==200){ //获取服务器的响应结束 var text=xmlHttp.responseText; //使用,分割他,得到数组 var arr=text.split(","); //循环遍历每个省份名称, for( var i=0;i<arr.length;i++){ var op=document.createElement("option");//创建一个指定名称元素 op.value=arr[i]; var textNode=document.createTextNode(arr[i]);//创建文本节点 op.appendChild(textNode);//把文本子节点添加到op元素中,指定其显示值 document.getElementById("p").appendChild(op); } } } }</script></head><body><h2 align="center">演示省市联动</h2><select name="province" id="p"> <option>===请选择省===</option></select><select name="city"> <option>===请选择市===</option></select></body>
后端处理代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub /** * 响应所有省的名称 */ //1.Document对象 //创建解析器对象 //调用解析器的读方法,传递一个流对象,得到Document try { SAXReader reader=new SAXReader(); InputStream input=this.getClass().getResourceAsStream("/china.xml"); Document doc=reader.read(input); /** * 查询所有province的name属性,得到一堆的属性对象 * 循环遍历,把所有的属性连接成一个字符串,发送给客户端 */ List<Attribute> arrList = doc.selectNodes("//province/@name"); StringBuilder sb=new StringBuilder(); for(int i=0;i<arrList.size();i++){ sb.append(arrList.get(i).getValue());//把每个属性的值存放到sb中 if(i<arrList.size()-1){ sb.append(","); } } response.getWriter().print(sb); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
通过jQuery实现AJAX
[1] post()方法
$.post(url, [data], [callback], [type])
参数:
url:发送AJAX的请求地址,字符串。
data:发送给服务器的请求参数,JSON格式。
callback:当前需要获取服务器发送的响应时,我们可以通过该回调函数。
jQuery会将响应信息以回调函数的参数的形式返回
type:响应信息的类型,字符串。一般两个常用值text、json
[2] get()方法
- get方法和post方法使用方式基本一致。
[3] getJSON()方法
getJSON(url, [data], [callback])
getJSON方法和get方法类似,只不过该方法默认的响应类型为JSON,不需要再手动指定。
注意:
使用get和getJSON都会有缓存问题,并且使用get方法不能传送较多的数据。
post方法不会有缓存的问题,所以我们开发时使用post方法较多。
不要忘记导jquery文件。
示例代码:
<script src="/AJAXTest/js/jquery.min.js"></script><script> $(function(){ $("#btn1").click(function(){ var url="${pageContext.request.contextPath}/AServlet"; var json={"username":"zhangsan","age":20}; function callback(data){ /* var div1=document.getElementById("div1"); div1.innerHTML+=data; */ /* $("#div1").html(data); */ var a=data.split(","); $("#username").val(a[0]); $("#password").val(a[1]); } $.get(url,json,callback); }); });</script>
- Ajax入门
- Ajax入门
- Ajax入门
- Ajax 入门
- AJAX入门
- ajax入门
- Ajax入门
- Ajax入门
- ajax入门
- Ajax入门
- AJAX入门
- ajax入门
- Ajax入门
- Ajax入门
- Ajax入门
- Ajax入门
- ajax入门
- Ajax入门
- Qt 之 QSqlIndex Class
- Promise用法小例
- ofbiz 权限设计详解
- 解决java.io.FileNotFoundException: D:\tempfile (拒绝访问。)
- 如何使用C语言实现copy拷贝的功能
- AJAX入门
- Python笔记(七)--变量类型之字典
- Linux下安装和配置solr/tomcat/IK分词器 详细实例一.
- WPF控制动画开始、停止、暂停和恢复
- js闭包
- 1019:排序问题1
- 博客中使用录制动态图
- JAVA中的反射机制
- TensorFlow实现流行机器学习算法教程汇集(上)