“伪”AJAX
由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title></head><body><div><p>请输入要加载的地址:<spanid="currentTime"></span></p><p><inputid="url"type="text"/><inputtype="button"value="刷新"onclick="LoadPage();"></p></div><div><h3>加载页面位置:</h3><iframeid="iframePosition"style="width: 100%;height: 500px;"></iframe></div><scripttype="text/javascript">window.onload=function(){var myDate=new Date();document.getElementById(‘currentTime‘).innerText=myDate.getTime();};function LoadPage(){var targetUrl=document.getElementById(‘url‘).value;document.getElementById("iframePosition").src=targetUrl;}</script></body></html> |
原生AJAX
Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件)。
1、XmlHttpRequest对象介绍
XmlHttpRequest对象的主要方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | a. voidopen(String method,String url,Boolen async)用于创建请求参数:method: 请求方式(字符串类型),如:POST、GET、DELETE...url: 要请求的地址(字符串类型)async: 是否异步(布尔类型)b. void send(String body)用于发送请求参数:body: 要发送的数据(字符串类型)c. void setRequestHeader(String header,String value)用于设置请求头参数:header: 请求头的key(字符串类型)vlaue: 请求头的value(字符串类型)d. String getAllResponseHeaders()获取所有响应头返回值:响应头数据(字符串类型)e. String getResponseHeader(String header)获取响应头中指定header的值参数:header: 响应头的key(字符串类型)返回值:响应头中指定的header对应的值f. void abort()终止请求 |
XmlHttpRequest对象的主要属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | a. Number readyState状态值(整数)详细:0-未初始化,尚未调用open()方法;1-启动,调用了open()方法,未调用send()方法;2-发送,已经调用了send()方法,未接收到响应;3-接收,已经接收到部分响应数据;4-完成,已经接收到全部响应数据;b. Function onreadystatechange当readyState的值改变时自动触发执行其对应的函数(回调函数)c. String responseText服务器返回的数据(字符串类型)d. XmlDocument responseXML服务器返回的数据(Xml对象)e. Number states状态码(整数),如:200、404...f. String statesText状态文本(字符串),如:OK、NotFound... |
2、跨浏览器支持
- XmlHttpRequest
IE7+, Firefox, Chrome, Opera, etc. - ActiveXObject("Microsoft.XMLHTTP")
IE6, IE5 - View Code
<!DOCTYPE html><html><head lang="en"> ???<meta charset="UTF-8"> ???<title></title></head><body> ???<h1>XMLHttpRequest - Ajax请求</h1> ???<input type="button" value="Get发送请求" /> ???<input type="button" value="Post发送请求" /> ???<script src="/statics/jquery-1.12.4.js"></script> ???<script type="text/javascript"> ???????function GetXHR(){ ???????????var xhr = null; ???????????if(XMLHttpRequest){ ???????????????xhr = new XMLHttpRequest(); ???????????}else{ ???????????????xhr = new ActiveXObject("Microsoft.XMLHTTP"); ???????????} ???????????return xhr; ???????} ???????function XhrPostRequest(){ ???????????var xhr = GetXHR(); ???????????// 定义回调函数 ???????????xhr.onreadystatechange = function(){ ???????????????if(xhr.readyState == 4){ ???????????????????// 已经接收到全部响应数据,执行以下操作 ???????????????????var data = xhr.responseText; ???????????????????console.log(data); ???????????????} ???????????}; ???????????// 指定连接方式和地址----文件方式 ???????????xhr.open(‘POST‘, "/test/", true); ???????????// 设置请求头 ???????????xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded; charset-UTF-8‘); ???????????// 发送请求 ???????????xhr.send(‘n1=1;n2=2;‘); ???????} ???????function XhrGetRequest(){ ???????????var xhr = GetXHR(); ???????????// 定义回调函数 ???????????xhr.onreadystatechange = function(){ ???????????????if(xhr.readyState == 4){ ???????????????????// 已经接收到全部响应数据,执行以下操作 ???????????????????var data = xhr.responseText; ???????????????????console.log(data); ???????????????} ???????????}; ???????????// 指定连接方式和地址----文件方式 ???????????xhr.open(‘get‘, "/test/", true); ???????????// 发送请求 ???????????xhr.send(); ???????} ???</script></body></html>基于原生AJAX - Demo
jQuery Ajax
jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能。
- jQuery 不是生产者,而是大自然搬运工。
- jQuery Ajax本质 XMLHttpRequest 或 ActiveXObject
注:2.+版本不再支持IE9以下的浏览器
伪AJAX
原文地址:https://www.cnblogs.com/sinancx/p/9255964.html