Ajax技术及使用步骤和同步异步方式,以及请求方式

同步方式、异步方式

在介绍AJAX技术之前,我们首先要了解同步请求和异步请求的概念。

1. 同步请求:

概念: 发送方在发出请求之后,需要等待接收方发回响应,在发回响应之前,用户界面做任何的操作都是无效的,只有等待接收方发回响应之后,才能响应用户交互,发送下一个数据包的通讯方式。

发送请求 --> 等待服务器处理请求(当前浏览器的任何操作无效) --> 处理完毕返回
2. 异步请求:

概念: 发送方在发送请求之后,会有单独的子线程去请求数据,而主线程依然响应处理用户交互,所以此时用户交互得到处理,用户流畅操作,用户体验比较好,不需要等待接收方的响应,直接发送下一个数据包的通讯方式。

发送请求 --> 服务器处理(浏览器可以进行别的操作) --> 处理完毕

请求方式(GET、POST)

当介绍完同步、异步方式后,还要介绍两种请求方式:

1. GET请求方式
  1. get是从服务器上获取数据。
  2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。 但由于出现在URL中,存在安全隐患。
  3. 对于get方式,服务器端用Request.QueryString获取变量的值。
  4. get传送的数据量较小,不能大于2KB。
    5 get安全性非常低。
2. POST请求方式
  1. post是向服务器传送数据。
  2. post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML
    HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  3. 对于post方式,服务器端用Request.Form获取提交的数据。
  4. post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
  5. post安全性较高。

由于 post方式没有将参数包含在URL内,而post方式会比get方式安全一点,它将参数隐藏起来,我们可以点开浏览器的开发者选项进入network部分,就可以查看到提交的数据。
如下图所示:
这里写图片描述

注意:由于可以利用抓包工具 Fiddler 、Charles 等抓取数据包,也可以查看提交的数据,因此post方式并不是绝对的安全。

Ajax技术的相关介绍

由同步异步方式,以及get和post请求方式,可以引出我们的AJAX技术:

Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

AJAX 是一种对于现有技术的结合,是一种支持异步请求的技术。核心是js对象-XMLHttpRequest。

优点:
1. 不需要重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
2. 不需要任何浏览器插件,只要求JavaScript能在浏览器执行。

在浏览器中,我们不需要刷新页面,就可以通过ajax技术来获取新的内容,就好比QQ空间动态是永远刷不完的。

AJAX技术的使用步骤及相关应用

1. 工作原理(AJAX 应用模型)

这里写图片描述

2. AJAX的使用步骤

五部曲:

1) 创建异步对象(XMLHTTPRequest)

//创建异步对象
var ajax = new XMLHttpRequest();

2)设置method和url(open()方法)

//设置跟服务端交互的信息
ajax.open('get','ajax.php?userName=jack');

注意:如果使用post提交数据,必须加上一句(在发送请求之前加上这句话)

ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

3) 发送请求(send()方法)

浏览器———–>请求报文———–>服务器

然后服务器将创建一个php文件,获取上传的数据(可选的),再返回给用户。

//发送请求
ajax.send();

4) 注册事件

//接受服务器反馈
    ajax.onreadystatechange = function () {
      //为判断服务器是否做出正确反应
      if(ajax.readyState == 4 && ajax.status == 200 ) {
        //打印相应内容
        console.log(ajax.responseText);
      }
    }

5)在事件中获取返回的数据,修改页面显示

服务器———响应报文———>在事件中获取返回的数据,修改页面显示

3. AJAX的五部曲详细用法

1)创建XMLHttpRequest对象(兼容写法)

//新版本浏览器
var ajax = new XMLHttpRequest();

//IE5,6
var ajax = new ActiveXObject("Microsoft.XMLHTTP");

因此兼容性写法:

var ajax;
if(XMLHttpRequest) {
     ajax = new XMLHttpRequest();
} else {
     ajax = new ActiveXObject("Microsoft.XMLHTTP");
}

2)发送请求

  • open( method,url,async)

    • method: 请求的类型,GET或POST
    • url: 文件在服务器上的位置
    • async: true(异步),false(异步)
  • send()

3) POST方式的注意点

form表单如果使用post方式提交数据,则必须使用XMLHttpRequest对象的setRequestHeader()方法。来添加http头,再用send方法添加想要发送的数据。

//发送与服务器端交互的信息
ajax.open("POST","ajax_test.php",true);
//设置http头
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//发送请求
ajax.send("fname=Bill&lname=Gates");

4)onreadystatechange()事件(当readyState属性发生变化时,就会调用该事件)

  • readyState: 存有XMLHttpRequest对象的状态
属性值 对象状态
0 请求未初始化
1 请求已经建立
2 请求已接收
3 请求处理中
4 请求已完成,且相应已就绪(需要的状态)
  • status:
属性值 状态
200 “ OK,页面存在 ”
404 “ 未找到页面 ”

5) 服务器响应内容

如果响应的是普通字符串,则使用responseText,如果响应的是XML,则使用responseXML。

  • responseText: 获取字符串形式的响应数据
  • responseXML: 获取XML形式的响应数据

在这里需要详细介绍一下responseText以及responseXML。

① responseText(获取到的数据以字符串形式)

获取的内容整个当做字符串

console.log(ajax.responseText);//将得到一个字符串
② responseXML(一个xml对象)

responseXML是专门一个属性用来获取xml对象

注意: xml对象在浏览器端就是一个document对象,解析时可以直接使用querySelector或getElementById等document语法

console.log(ajax.responseXML);//将得到一个document对象
console.log(ajax.responseXML.querySelector('name').innerHTML);

其中:
XML文件格式:自己定义key值,且key以双标签形式存在

1. 开头 
       <?xml version="1.0" encoding="UTF-8"?>
2. 根节点 如:
       <person></person>
3. 若干子节点: 
       <name>王狗蛋</name>
       <age>15</age>
       <sex></sex>
       <hobby>eating</hobby>
       <skill>play games</skill>
    <?xml version="1.0" encoding="UTF-8"?>
    <person>
        <name>王狗蛋</name>
        <age>15</age>
        <sex></sex>
        <hobby>eating</hobby>
        <skill>play games</skill>
    </person>
③ xml的格式

当需要用到reponseXML时,就需要了解XML的格式。

  • 是按照某种既定的格式写的字符串
  • 最开始要写版本号(可选的)
  • 通通使用双标签
  • 最外层需要写一个根节点
  • 标签的名字是可以随便编写的
    • 不可以使用数字开头
    • 不可以使用中文
  • 如果写了版本号,就要放在第一行

4. 使用ajax案例

1)ajax——–get方式

<h2>ajax请求 --- get方式</h2>
<input type="text" class='user' >
<input type="button" class='btnAjax' value='发送ajax请求'>
<script>
    var btn = document.querySelector(".btnAjax");
    var userName = document.querySelector('.user');
    //按钮的点击事件
    btn.onclick = function () {
        //创建异步对象
        var ajax = new XMLHttpRequest();
        //设置method和url(利用open方法)
        //url内的key要和php文件中$_GET['key']中的key一样
        ajax.open('get', '01.php?name='+userName.value);
        //发送ajax请求
        ajax.send();
        //注册事件 
        //onreadystatechange()
        ajax.onreadystatechange = function () {
            if(ajax.readyState == 4 && ajax.status == 200) {
                console.log(ajax.responseText);
            }
        }
    }
</script>

01.php页面

header("content-type:text/html;charset=utf-8");
echo $_GET["name"].'欢迎你!!';

2)ajax———-post方式

与get方式类似,只有两点不同

  • 需要在发送请求前(send方法前)加上一句
//post方式发送数据,需要利用setRequestHeader()来声明http头
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  • post方式请求的数据放在send()方法内
    格式:(‘name=jack&age=18’)
//在send方法中来规定希望发送的数据
ajax.send('name='+inpContent.value);

jQuery中的ajax()、get()以及post()方法

jquery中实现Ajax功能的有以下三个方法:

1. $.ajax()

有以下等参数:

参数名 参数描述
data 规定发送到服务器上的数据
dataType 规定服务器返回的数据的类型(xml,html,script,json,jsonp,text)
success 请求成功后调用的方法
url 规定将请求发送到哪个URL上
type 决定是哪种请求方式—(post或get)
error 请求失败时调用的方法
sendBefore 回调函数 (请求发送前调用)

注意:

  1. 如果dataType的值为json的话,它内部会自动生成一个js对象
  2. 在sendBefore回调函数中,如果return false,将取消这次请求

具体代码如下:

$.ajax({      
    url: 'demo.php',
    type: 'post',
    data: 'name=zhangsan',
//dataType的使用,如果服务器发来的数据和dataType属性值不同的话,会出现乱码
    dataType: 'text',
    success: function (data) {
         console.log(data);
    },
    beforeSend: function () {
          console.log('发送之前调用');
         //return false;将取消这次请求
    },
    error: function () {
         console.log('请求失败了!');
    }
});
2. $.get()

格式:$.get(url,data,success(data){},dataType)

参数:

参数名 参数描述
url 规定将请求发到哪个URL上
data 规定连同请求一起发送到服务器上的数据,支持将数据写成js对象的格式
success(data) 回调函数,当请求成功,调用的函数
dataType 从服务器获得的数据的类型

具体代码如下:

$.get('demo.php',{name:'zhangsan',age:'18'},function (data){
      console.log(data);
  },'text');
3. $.post()

格式: $.post(url,data,success(data){},dataType)
参数:

参数名 参数描述
url 规定将请求发到哪个URL上
data 规定连同请求一起发送到服务器上的数据,支持将数据写成js对象的格式
success(data) 回调函数,当请求成功,调用的函数
dataType 从服务器获得的数据的类型

具体代码如下:

$.post('demo.php',{name:'zhangsan',age:'18'},function (data){
    console.log(data);
},'text');

猜你喜欢

转载自blog.csdn.net/weixin_41342585/article/details/79905697
今日推荐