ajax swift 拦截,实例讲解Ajax

本文详细介绍了Ajax的基本概念、工作原理以及如何使用原生JavaScript实现Ajax请求,包括创建XMLHttpRequest对象、配置请求参数、发送请求及处理响应状态。通过实例展示了GET和POST方式的使用,强调了异步数据传输对提升用户体验的重要性。
摘要由CSDN通过智能技术生成

Ajax是目前很普遍的一门技术,也是很值得探讨和研究的一门技术。本文将针对Ajax的发展过程并结合其在不同库框架中的使用方式来和大家一起学习Ajax的那些新老语法。

Ajax简介

Ajax全称为“Asynchronous Javascript And XML”, 即“异步JavaScript和XML”的意思。通过Ajax我们可以向服务器发送请,在不阻塞页面的情况下进行数据交互,也可以理解为异步数据传输。在Ajax的帮助下我们的网页只需局部刷新即可更新数据的显示,减少了不必要的数据量,大大提高了用户体验,缩短了用户等待的时间,使得web应用程序更小、更快,更友好。

当然以上都是司空见惯的内容了,作为一名合格的开发人员基本都再熟悉不过了,这里只为那些刚入门的新手做一个简单的介绍。

原生Ajax

基本上所有现代的浏览器都支持原生Ajax的功能,下面就来详细介绍下利用原生JS我们怎样来发起和处理Ajax请求。

1.获取XMLHttpRequest对象

var xhr = new XMLHttpRequest(); // 获取浏览器内置的XMLHttpRequest对象

如果你的项目应用不考虑低版本IE,那么可以直接用上面的方法,所有现代浏览器(Firefox、Chrome、Safari以及Opera)都内建了XMLHttpRequest对象。如果需要兼容老版本IE(IE5、IE6),那么可以使用ActiveX对象:

var xhr;

if (window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else if (window.ActiveXObject) {    // 兼容老版本浏览器

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

}

2.参数配置

有了XMLHttpRequest对象,我们还需要配置一些请求的参数信息来完成数据交互,利用open方法即可:

var xhr;

if (window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else if (window.ActiveXObject) {

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

}

if (xhr) {

xhr.open('GET', '/test/', true); // 以GET请求的方式向'/test/'路径发送异步请求

}

open方法为我们创建了一个新的http请求,其中第一个参数为请求方式,一般为'GET'或'POST';第二个参数为请求url;第三个参数为是否异步,默认为true。

3.发送请求

配置完了基本参数信息,我们直接调用send方法发送请求,代码如下:

var xhr;

if (window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else if (window.ActiveXObject) {

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

}

if (xhr) {

xhr.open('GET', '/test/', true);

xhr.send(); // 调用send方法发送请求

}

这里需要注意的是如果使用GET方法传递参数,我们可以直接将参数放在url后面,比如'/test/?name=luozh&size=12';如果使用POST方法,那么我们的参数需要写在send方法里,如:

xhr.open('POST', '/test/', true);

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 将请求头设置为表单方式提交

xhr.send('name=luozh&size=12');

最终会以Form Data的形式传递:

261f2c986f10518f1df73fb75b34eb2f.png

如果不设置请求头,原生Ajax会默认使用Content-Type是'text/plain;charset=UTF-8'的方式发送数据,如果按照上面的参数书写形式,我们最终传输的形式这样的:

575aaeb4f6812f05f3bf9fe7388c7dd6.png

显然这并不是服务器期望的数据格式,我们可以这样写:

xhr.open('POST', '/test/', true);

xhr.send(JSON.stringify({name: 'luozh', size: 12}));

最终传输的格式如下:

887f2cfe332f890f14539407c468bea6.png

这样我们可以直接传递JSON字符串给后台处理,当然后台也许进行相应配置。

4.监测状态

发送完Ajax请求之后,我们需要针对服务器返回的状态进行监测并进行相应的处理,这里我们需要使用onreadystatechange方法,代码如下:

var xhr;

if (window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else if (window.ActiveXObject) {

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

}

if (xhr) {

xhr.open('GET', '/test/', true);     // 以GET请求的方式向'/test/'路径发送异步请求xhr.send();

xhr.onreadystatechange = function () {    // 利用onreadystatechange监测状态

if (xhr.readyState === 4) {    // readyState为4表示请求响应完成

if (xhr.status === 200) {    // status为200表示请求成功

console.log('执行成功');

} else {

console.log('执行出错');

}

}

}

}

上面我们利用onreadystatechange监测状态,并在内部利用readyState获取当前的状态。readyState一共有5个阶段,当其为4时表示响应内容解析完成,可以在客户端调用了。当readyState为4时,我们又通过status来获取状态码,状态码为200时执行成功代码,否则执行出错代码。

当然我们可以用onload来代替onreadystatechange等于4的情况,因为onload只在状态为4的时候才被调用,代码如下:

xhr.onload = function () {    // 调用onload

if (xhr.status === 200) {    // status为200表示请求成功

console.log('执行成功');

} else {

console.log('执行出错');

}

}

然而需要注意的是,IE对onload这个属性的支持并不友好。

除了onload还有:

onloadstart

onprogress

onabort

ontimeout

onerror

onloadend

等事件,有兴趣的同学可以亲自去实践它们的用处。

以上便是原生Ajax请求数据的常见代码。

文章来自:博客园/劳卜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值