Ajax简单解析
来源:互联网 发布:做网站必备软件 编辑:程序博客网 时间:2024/04/25 07:44
1、什么是Ajax?
- AJAX = 异步 JavaScript 和 XML。
- AJAX 是一种用于创建快速动态网页的技术。
- 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
- 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
- 有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。
引用自:AJAX 简介
2、准备一下资源
网页代码如下:
<html><head> <script src="js/jquery-3.2.0.min.js"></script> <script type="text/javascript">...</script> . . . <script type="text/javascript">...</script></head><body><h2>Hello World!</h2><form> First Name: <input type="text" id="txt1" onkeyup="showHint(this.value)" onclick="mXXXX(this.value)" ></form><p>Suggestions: <span id="txtHint"></span></p><p>Suggestions: <span id="loadz"></span></p></body></html>
mXXXX(this.value)这个js方法替换为后面的事例即可。
jquery的话自己准备,去官网下载就好了。
后台代码如下(代码基于Spring MVC):
package space.xxhui.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping("ajax")public class Ajax { @RequestMapping("processing") @ResponseBody public String processing(@RequestParam("q")String param){ System.out.println(param+"-"); return param+"-"; } @RequestMapping("load") @ResponseBody public String load(String mString){ System.out.println(mString); return mString+"down"; }}
3、使用最原始的JS代码生成XMLHttpRequest
<script type="text/javascript"> var xmlHttp = null; function showHint(str) { if (str.length == 0) { document.getElementById("txtHint").innerHTML = ""; return; } try {// Firefox, Opera 8.0+, Safari, IE7 xmlHttp = new XMLHttpRequest(); } catch (e) {// Old IE try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support XMLHTTP!"); return; } } var url = "/ajax/processing?q=" + str; url = url + "&sid=" + Math.random();//get方法添加一个随机数,防止获取到缓存数据 xmlHttp.onreadystatechange=function() { if (xmlHttp.readyState==4 && xmlHttp.status==200) { document.getElementById("txtHint").innerHTML = xmlHttp.responseText; } } xmlHttp.open("GET", url, true); xmlHttp.send(null); } </script>
解释:由于IE5 和 IE6 使用 ActiveXObject,所以考虑兼容性,如果浏览器不能实例化XMLHttpRequest,就实例化ActiveXObject,两者都不行则返回,Ajax使用异步才能体现其价值所在,所以这里不示范同步的方法。
在同步和异步中,公用的方法有:
open(method,url,async) : 规定请求的类型、URL 以及是否异步处理请求。
- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置
- async:true(异步)或 false(同步)
send(string) : 将请求发送到服务器。
- string:仅用于 POST 请求
open方法实际上是往对象中放参数,真正跟服务器沟通的步骤应该是open方法执行的时候。
而当async为true时,那么这时,使用的异步方法,此时要操作数据只能依靠一个回调function:onreadystatechange
onreadystatechange : 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
XMLHttpRequest属性:
readyState : 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status :
200: “OK”
404: 未找到页面
注释:onreadystatechange 事件被触发 5 次(0 - 4),对应着 readyState 的每个变化。
总结过程是如下:
1、生成XMLHttpRequest
2、设置onreadystatechange方法
3、open设置参数
4、send正式连接
参考:AJAX XHRx章节
4、$.ajax、$.get、$.post、.load的区别和用法
4.1、区别
1、jquery对Ajax进行了封装,其中$.ajax方法是最基本的方法其中也拥有众多的属性可以设置,灵活度最高,但也是原始的,$.get、$.post、.load三个方法比$.ajax更高一级,你可以这想成上下级关系。
2、$.get、$.post、.load三个方法中,我们也可以分一分,根据操作的对象是否是选择器,.load方法是需要一个选择器元素的,否则不能执行.load方法,$.get、$.post则是直接$美元符号执行方法。
3、$.get、$.post再次细分,就是http中的get方法和post方法的区别了,get方法数据放在url中,有长度限制,并且允许缓存,而post方法数据放在请求体中,没有长度限制,没有缓存机制。
所以思路是这样子,接下来看看代码吧,说得再多,不如体验一把。
4.2、$.ajax方法
jQuery 发送的所有 Ajax 请求,内部都会通过调用 $.ajax() 函数来实现。通常没有必要直接调用这个函数,可以使用几个已经封装的简便方法,如$.get()和.load()。如果你需要用到那些不常见的选项,那么,$.ajax()使用起来更灵活。
实例:
<script type="text/javascript"> function mAjax(str) { $.ajax({ url: "/ajax/load", data:{mString:str}, success:function(responseTxt,statusTxt,xhr){ if(statusTxt=="success") alert("data: "+responseTxt+"\nnStatus:"+statusTxt); } }); } </script>
其中success属性的是一个function,原型是:
Function( Anything data, String textStatus, jqXHR jqXHR )
这个方法也是成功时的回调,逻辑在这个function中执行,第一个形参数是返回的数据,第二个是状态,这里是success,第三个是XMLHttpRequest对象(不同版本jquery会有不同的类名,所以你知道是XMLHttpRequest对象就行了)
4.3、.load方法
描述:从服务器载入数据并且将返回的 HTML 代码并插入至 匹配的元素 中。
方法原型:
.load( url [, data ] [, complete(responseText, textStatus, XMLHttpRequest) ] )
- url是请求的地址(可以值一个html页面
- data可选项,向服务器发送一些数据
- complete类型方法,跟上面的回调参数一样不做解释,这个回调方法是在load方法执行完,并且html完全加载完后执行该方法。
这个方法是从服务器获取数据最简单的方法。除了不是全局函数,这个方法和$.get(url, data, success) 基本相同,它有一个隐含的回调函数。 当他检查到一个成功的请求(i.e. 当 textStatus是 “success” 或者 “notmodified”)时,.load() 方法将返回的HTML 内容数据设置到相匹配的节点中。
如果选择器没有匹配的元素——在这种情况下,如果document不包含id = “result” 的元素- 这个Ajax请求将不会被发送出去。
实例:
<script type="text/javascript"> function mLoad(str) { $("#loadz").load("/ajax/load",{mString:str},function(responseTxt,statusTxt,xhr){ if(statusTxt=="success") alert("data: "+responseTxt+"\nnStatus:"+statusTxt); if(statusTxt=="error") alert("Error: "+xhr.status+": "+statusTxt); }); } </script>
在.load方法中,可以加载一个html,如果没有添加了选择器表达式,html中含有js脚本会被加载运行,添加了选择器表达式,会只加载那个选择器的内容。
4.4、$.get方法
描述:使用一个HTTP GET请求从服务器加载数据。
方法原型:
jQuery.get( url [, data ] [, success ] [, dataType ] )
- url是请求的地址(可以值一个html页面
- data可选项,向服务器发送一些数据
- success属性是一个可选项方法,跟上面的回调参数一样不做解释,这个回调方法是在成功返回数据的时候调用。
- dataType可选项,从服务器返回的预期的数据类型。默认:智能猜测(xml, json, script, text,html)。注意:有dataType必须要有success回调方法
$.get方法,等价于:
$.ajax({2. url: url,3. data: data,4. success: success,5. dataType:data类型6.});
实例:
<script type="text/javascript"> function mGet(str){ $.get("/ajax/load?mString="+str , function (data,status){ alert("Data: " + data + "\nnStatus: " + status); }); } </script>
4.5、$.post方法
描述:使用一个HTTP POST 请求从服务器加载数据。
方法原型:
jQuery.post( url [, data ] [, success ] [, dataType ] )
方法参数与get相同不做解释。
注意:用 POST 获取的页面是从来不会被缓存, 所以这些请求中的 cache 和 ifModified 选项在 jQuery.ajaxSetup() 是无效的。
实例:
<script type="text/javascript"> function mPost(str){ $.post("/ajax/load" ,{mString:str}, function (data,status){ alert("Data: " + data + "\nnStatus: " + status); }); } </script>
5、后记
图描述:
其实上面$.ajax、$.get、$.post、.load四个方法都是完成同样的功能,完全没问题,怎么运用就看业务的实际需要了。
- Ajax简单解析
- 实战AJAX-------简单实例解析
- ajax同步,异步简单解析
- 一个最简单的AJAX实例及解析
- 解析Ajax响应结果的两种简单方法.
- 解析ajax响应结果的两种简单方法
- 一个最简单的ajax实例及解析
- 一个最简单的AJAX实例及解析
- 一个最简单的AJAX实例及解析
- Ajax基础实例--简单实现和注意点解析
- AJAX 解析
- 简单AJAX
- 简单Ajax
- ajax简单解析xml文件(复杂的解析可以通过后台程序实现,如一般处理程序)
- jquery ajax $.ajax()用法解析
- AJAX实例解析
- Ajax解析XML
- Ajax技术原理解析
- 2017 Multi-University Training Contest
- mysql分库分表
- python 迭代器和生成器及例子
- 菜鸟的myeclipse快捷之路
- python 经典类和新式类
- Ajax简单解析
- python显示图片
- 学习记录(8)
- POJ 1088 滑雪——DP
- python 公有属性和私有属性
- Codeforces Round #428 (Div. 2) D
- hdu 4944 FSF’s game 数学(公因子)+递推公式
- test ATL OCX by vs2015
- 面试运维