AJAX方法详解

AJAX(Asynchronous JavaScript and XML),即异步的JavaScript和XML,AJAX 不是新的编程语言,而是一种使用现有标准的新方法,它是前后端交互的重要手段。

1.AJAX的优缺点

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面,而使用AJAX有以下优势:

  • 无刷新加载页面
  • 采用异步方式与服务器通信,效率高
  • 减轻了服务器和带宽的负担
  • 提高了用户体验

但是,AJAX也有很多不尽人意的地方,比如:

  • 破坏了浏览器自身的前进、后退功能
  • 对搜索引擎支持较弱
  • AJAX不能很好支持移动设备
  • 浪费性能

2.创建 XMLHttpRequest 对象

XMLHttpRequest是Ajax 的基础,XMLHttpRequest的对象用于客户端和服务器之间的异步通信。
IE7+、Firefox、Chrome、Safari 以及 Opera创建 XMLHttpRequest 对象的语法:

var xhr = new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

var xhr = new ActiveXObject("Microsoft.XMLHTTP");

兼容写法:

var xhr;
if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari
}
else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");// IE6, IE5
}

3.向服务器发送请求

使用 XMLHttpRequest 对象的open()和send()方法:

xhr.open("GET", "test1.php", true); 
//请求方式,请求地址,是否异步
xhr.send();

open(method, url, async):规定请求的类型,URL以及是否异步处理请求。
method:请求方式,GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)

send(string) :将请求发送到服务器
string:仅用于 POST 请求

  • 如果通过GET方法发送信息,在URL的"?"后添加信息:
xhr.open("GET", "test1.php?user=admin&pass=123", true);
xhr.send();
  • 如果通过POST方法发送信息,需要通过setRequestHeader()设置请求头(固定格式),然后在 send()方法中规定要发送的数据
xhr.open("post", "test1.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("user=admin&pass=123");
GET与POST的区别总结
  1. 语义化不一样,GET 倾向于从服务器获取数据,POST 倾向于向服务器提交数据语义化不一样,GET 倾向于从服务器获取数据,POST 倾向于向服务器提交数据
  2. 传递参数的方式,GET 请求直接在地址栏后面拼接,POST 请求在请求体里面传递
  3. 参数的大小限制,GET 请求一般不大于 2KB,POST 请求理论上没有上限
  4. 缓存能力,GET 会被浏览器主动缓存,POST 不会被浏览器主动缓存
  5. 安全性能,GET 请求相对安全性比较低,POST 请求相对安全性比较高

4.onreadystatechange 事件

XMLHttpRequest 对象的三个属性:
onreadystatechange:存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState:AJAX状态码。从0 到 4发生变化

  • 0:创建 ajax 对象成功
  • 1:配置请求信息成功
  • 2:响应已经回到浏览器
  • 3:浏览器正在解析响应体
  • 4:响应体解析完毕可以使用了

status:HTTP响应状态码。

  • 100-199:表示连接继续
  • 200-299:各种成功
  • 300-399:重定向
  • 400-499:客户端错误
  • 500-599:服务端错误

其中最为常见的有,200表示标准请求成功,404表示服务器找不到请求的 URL
当AJAX状态码readyState === 4且HTTP响应状态码 status === 200的时,
就可以开始处理服务器返回的数据了。

xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            // 服务器返回的数据
        }
    }

5.服务器响应

XMLHttpRequest 对象的 responseText 或 responseXML 属性
responseText:获得字符串形式的响应数据。
responseXML:获得 XML 形式的响应数据。

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText); 
    }
}

6.jQuery Ajax - ajax()方法

强大的jQuery给我们提供了它封装好了的ajax方法,但是调用前,必须先引入jQuery库,这里以在线jQuery为例

<script crossorigin="anonymous" integrity="sha384-TlQc6091kl7Au04dPgLW7WK3iey+qO8dAi/LdwxaGBbszLxnizZ4xjPyNrEf+aQt" src="https://lib.baomitu.com/jquery/2.2.4/jquery.js"></script>

接下来就一起看看jQuery给我们封装好的ajax方法吧!

$.ajax({
    url:"",    
    type:"",    
    data:{},    
    success:function(){},  
    error:function(){},    
    beforeSend:function(){},    
    timeout:10,       
    dataType:"",     
    jsonp:"",       
    async:true,     
    global:true,    
});
  • url:要请求的地址(必传)
  • type:请求方式(可选) 默认get
  • data:要发送的数据(可选) 默认不发
  • success:成功执行的回调函数,可选
  • error:失败执行的回调函数,可选
  • beforeSend:发送之前执行的回调函数,可选
  • timeout:请求超过的时间,可选,默认100
  • datatype:接收到的数据类型,可选,默认text
  • jsonp:后台要执行的函数所在的字段名,如百度的cb
  • async:默认true,异步
  • global:是否执行钩子函数,默认true

小结:

AJAX可以请求正常的资源,但是不支持未经允许的跨域请求。如果跨域请求则需使用 jsonp。关于jsonp,会在下篇博客与大家共享。
最后,逆战加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值