Ajax基础(详讲+案例)
来源:互联网 发布:php购物网站 编辑:程序博客网 时间:2024/06/11 01:19
。(一)初步认识ajax:中文又称作“啊甲思”,英语是:asynchronous javascript and xml (翻译为 js跟xml的异步),其实底层还是js。其中最大最大最大的特点就是页面的不刷新
1. AJAX=HMTL+CSS+JS+DOM+XHR 等多种技术的一个总和
2. 传统的一个web是一个请求—>等待响应—>请求—->等待响应的过程。这叫做同步
3. 现代Web应用是以请求->请求->请求->响应->响应->响应->…,叫异步请求/操作
可以列举几个ajax使用的例子加深印象:
1. 传统的注册表单时,验证用户名是否唯一。需要点击注册之后才会到数据库验证。而使用ajax时,可在文本框失去焦点的时候就去数据库验证。更符合现在web需求
2. 无刷新的分页。
3. 百度搜索框输入文本时,未提交就有提示的效果。看下面插图…..等等应用
总结来说:也就是,当你需要局部请求服务器而不是全局请求服务器的时候,就可以考虑一下ajax
(二)ajax的使用
这里我特别个人推荐是:看手册学习。截个图
1:创建ajax
//包括IE7以上版本的浏览器var xhr = new XMLHttpRequest();//IE(6/7/8)方式 ,这里大小写不敏感var xhr = new ActiveXObject(“Microsoft.XMLHTTP”); //最原始方式var xhr = new ActiveXObject(“Msxml2.XMLHTTP”); //升级var xhr = new ActiveXObject(“Msxml2.XMLHTTP.3.0”); //升级var xhr = new ActiveXObject(“Msxml2.XMLHTTP.5.0”); //升级var xhr = new ActiveXObject(“Msxml2.XMLHTTP.6.0”); //最高版本方式//因此个人是这样创建的 function createXHR(){ var xhr = null; try{ xhr = new ActiveXObject("microsoft.xmlhttp"); }catch(e){ try{ xhr = new XMLHttpRequest(); }catch(e){ window.alert("你的浏览器太差"); } } return xhr; }
2:开发步骤
- 创建一个 ajax对象 。方法在上面
- 利用open方法准备发送一个请求。xhr.open(“get/post(请求方式)”,”请求的网址路径”,false/true同步或者异步)
- 利用send方法确实发送了这个请求。如果是get请求的话,那么xhr.send(null),如果是post请求的话,xhr.send(“参数”)
- 接受返回的信息。利用状态监听。虽然这里是第四步骤,但是习惯把这个写在第二布的位置
(三)直接上案例咯
1:动态返回时间 java代码哦
<body> <input type="button" value="ajax体验,请点击我"/> <hr/> <div> <!-- 显示结果 --> </div> <script type="text/javascript"> var inputElement = document.getElementsByTagName("input")[0]; inputElement.onclick=function(){ //创建AJAX引擎对象 var xhr = createXHR(); //为AJAX引擎对象设置状态改变事件[0-4共5个] xhr.onreadystatechange = function(){ //如果请求和响应已经完成 if(xhr.readyState==4){ //响应是否正确 if(xhr.status==200){ //取得AJAX引擎的响应结果 var msg = xhr.responseText; //查询<div>标签 var divElement = document.getElementsByTagName("div")[0]; //将内容写入<div>标签内 divElement.innerHTML = msg; } } } //准备发送异步请求到服务端 xhr.open("get","/ajax/AjaxServlet"); //真正发送异步请求 xhr.send(null); } //根据不同浏览器创建AJAX引擎对象 function createXHR(){ var xhr = null; //如果是IE if(window.ActiveXObject){ xhr = new ActiveXObject("microsoft.xmlhttp"); //如果非IE }else{ xhr = new XMLHttpRequest(); } return xhr; } </script>AjaxServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("AjaxServlet::doGet()"); String msg = new Date().toLocaleString(); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write(msg); }
2://Get方式 + 动态检查用户名是否合法
Get方式说明:
①在url地址后边以请求字符串(传递的get参数信息)形式传递数据。
② 对中文、=、&等特殊符号处理
=、&符号在浏览器里边会与请求字符串的关键符号有混淆,避免歧义产生需要对其进行编码.
在php里边可以函数函数 urlencode()/urldecode()对特殊符号进行编码、反编码处理
(url_encode()可以把中文转变为浏览器可以识别的信息。转变之后的信息具体为%号后接两个十六进制数)
在javascript里边可以通过encodeURIComponent ()对特殊符号等信息进行编码。
特别注意一点是:这里采用的以字符串的形式接受返回的数据,说以msg = xhr.responseText。下面的post就是以xml的方式返回
<body> 输入用户名:<input type="text"/>光标移出后,立即查检结果 <hr/> <div> <!-- 显示结果 --> </div> <script type="text/javascript"> document.getElementsByTagName("input")[0].onblur=function(){ //取得用户输入的用户名 var username = this.value; //对中文编码 username = encodeURI(username); //创建AJAX引警对象 var xhr = createXHR(); //设置函数监听 xhr.onreadystatechange = function(){ if(xhr.readyState==4){ if(xhr.status==200){ var msg = xhr.responseText; var divElement = document.getElementsByTagName("div")[0]; divElement.innerHTML = "<img src='"+msg+"'/>"; } } } //准备以GET方式发送请求 xhr.open("get","/ajax/GetServlet?time="+new Date().getTime()+"&username="+username); //真正发送请求 xhr.send(null); } function createXHR(){ var xhr = null; try{ xhr = new ActiveXObject("microsoft.xmlhttp"); }catch(e){ try{ xhr = new XMLHttpRequest(); }catch(e){ window.alert("你的浏览器太差"); } } return xhr; } </script> </body>GetServlet、public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("GetServlet::doGet()"); String username = request.getParameter("username"); byte[] buf = username.getBytes("ISO8859-1"); username = new String(buf,"UTF-8"); String msg = null; if(username.equals("赵君")){ //msg = "<font color='red'>该用户已存在</font>"; msg = "images/MsgError.gif"; }else{ //msg = "<font color='green'>可以注册</font>"; msg = "images/MsgSent.gif"; } response.setContentType("text/html;charset=UTF-8"); response.getWriter().write(msg); }
3:Post方式 + 动态检查用户名是否合法
Post方式说明
① 给服务器传递数据需要调用send(请求字符串数据)方法
② 调用方法setRequestHeader()把传递的数据组织为xml格式(模仿form表单给服务器传递数据)
③ 传递的中文信息无需编码,特殊符号像 &、=等 需要编码
④ 该方式请求的同时也可以传递get参数信息,同样使用$_GET接收该信息
5.对于POST请求,一定要设置请求头,代码如下:
xhr.setRequestHeader(“content-type”,”application/x-www-form-urlencoded”);
在open()之后,在send()之前这里采用的以xml的形式接受返回的数据
特别注意一点是:,说以msg = xhr.responseXml。上面的get以text方式返回。也就是responseTest。。好好体会一下接下来接收数据的方式不一样
<body> 输入用户名:<input type="text"/>单击检查按钮后,立即查检结果 <input type="button" value="检查"/> <hr/> <div> <!-- 显示结果 --> </div> <script type="text/javascript"> document.getElementsByTagName("input")[1].onclick=function(){ //取得用户输入的用户名 var username = document.getElementsByTagName("input")[0].value; //对中文编码 username = encodeURI(username); //创建AJAX引警对象 var xhr = createXHR(); //设置函数监听 xhr.onreadystatechange = function(){ if(xhr.readyState==4){ if(xhr.status==200){ //以字符串形式接收 //var msg = xhr.responseText; //以XML形式接收 var xmlDocument = xhr.responseXML; var resElement = xmlDocument.getElementsByTagName("res")[0]; var msg = resElement.firstChild.nodeValue; var divElement = document.getElementsByTagName("div")[0]; divElement.innerHTML = "<img src='"+msg+"'/>"; } } } //准备以POST方式发送请求 xhr.open("post","/ajax/PostServlet?time="+new Date().getTime()); //设置请求头,只有是POST方式下,才设置该请求头 xhr.setRequestHeader("content-type","application/x-www-form-urlencoded"); //真正发送请求 xhr.send("username="+username); } function createXHR(){ var xhr = null; try{ xhr = new ActiveXObject("microsoft.xmlhttp"); }catch(e){ try{ xhr = new XMLHttpRequest(); }catch(e){ window.alert("你的浏览器太差"); } } return xhr; } </script> </body> PostServlet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("PostServlet::doPost()"); request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); System.out.println("用户名:" + username); String msg = null; if(username.equals("赵君")){ msg = "images/MsgError.gif"; }else{ msg = "images/MsgSent.gif"; } response.setContentType("text/xml;charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.write("<root>"); pw.write("<res>"); pw.write(msg); pw.write("</res>"); pw.write("</root>"); }
(四)get方式 + post方式总结
两者的不同
① 给服务器传递数据量,get最多是2k
post原则没有限制,php.ini对其限制为8M
② 安全方面,post传递数据较安全
③ 传递数据的形式不一样
get方式在url地址后边以请求字符串形式传递参数
http://网址/index.php?name=tom&age=23&addr=beijing
蓝色部分就是请求字符串,就是一些“名-值”对,中间使用&符号连接。
post方式是把form表单的数据给请求出来以xml形式传递给服务器
(五)AJAX的缺点:
a)浏览器支持不统一
b)无页面刷时,所以浏览器的”前进”和”后退”按钮失效
c)一些浏媒体支持不完善
(由上面两个例子看出,如果是xml返回格式的话,不仅仅说在response中写xml麻烦,而且还有在接受数据解析xml也麻烦。后面介绍用json格式返回数据)。下一篇介绍经典的多级菜单联动的源码
- Ajax基础(详讲+案例)
- Json基础(详细讲+案例)
- AJAX培训第一讲:AJAX基础
- AJAX培训第一讲:AJAX基础
- Java Web基础:第二十讲 Ajax概述
- Java Web基础:第二十讲 Ajax概述
- opencv--第二讲(案例分享)
- Java Web基础:第二十二讲 Ajax交互简单实例
- Java Web基础:第二十一讲 Ajax交互的基本过程
- Java Web基础:第二十一讲 Ajax交互的基本过程
- Java Web基础:第二十二讲 Ajax交互简单实例
- Android Service基础详讲
- 神经网络第一讲(基础)
- Ajax案例
- Ajax案例
- AJAX培训第二讲:使用AJAX框架(上)
- AJAX培训第二讲:使用AJAX框架(下)
- 环形缓冲区(通俗讲:生产者消费者的一个案例)
- @SuppressWarnings()的参数详解
- PAT-A1099. 二叉树-中序建树 层序输出
- SSM框架一些相关配置解读(不完整)
- Registered factories
- ML的45问(1)——概念学习、归纳偏置与候选消除法
- Ajax基础(详讲+案例)
- 使用GDAL的ogr2ogr.py将shapefile插入到mysql中(二)
- opencv之级联分类器训练属于自己的xml文件
- 剑指offer-链表中倒数第K个节点-php
- Ubuntu- Adb\fastboot 使用规则配置
- doget和dopost的区别
- spfa 1874
- 数据结构与算法(2)——算法的复杂度
- python配置文件(XML文件)