伪AJAX

Posted sinancx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了伪AJAX相关的知识,希望对你有一定的参考价值。

“伪”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>请输入要加载的地址:<span id="currentTime"></span></p>
            <p>
                <input id="url" type="text" />
                <input type="button" value="刷新" onclick="LoadPage();">
            </p>
        </div>
 
 
        <div>
            <h3>加载页面位置:</h3>
            <iframe id="iframePosition" style="width: 100%;height: 500px;"></iframe>
        </div>
 
 
        <script type="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. void open(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
   状态码(整数),如:200404...
 
f. String statesText
   状态文本(字符串),如:OK、NotFound...

2、跨浏览器支持

    • XmlHttpRequest
      IE7+, Firefox, Chrome, Opera, etc.
    • ActiveXObject("Microsoft.XMLHTTP")
      IE6, IE5
    • 技术分享图片
      <!DOCTYPE html>
      <html>
      <head lang="en">
          <meta charset="UTF-8">
          <title></title>
      </head>
      <body>
      
          <h1>XMLHttpRequest - Ajax请求</h1>
          <input type="button" onclick="XmlGetRequest();" value="Get发送请求" />
          <input type="button" onclick="XmlPostRequest();" 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
      View Code

jQuery Ajax

jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能。

  • jQuery 不是生产者,而是大自然搬运工。
  • jQuery Ajax本质 XMLHttpRequest 或 ActiveXObject 

注:2.+版本不再支持IE9以下的浏览器



以上是关于伪AJAX的主要内容,如果未能解决你的问题,请参考以下文章

伪代码

前端 - js方式Ajax/ jquery方式Ajax / 伪 ajax /伪ajax 进阶方式

Javascript代码片段在drupal中不起作用

伪AJAX

ajax之---“伪”ajax

Day24--伪Ajax