Ajax用法详解

前言

学习Ajax,今天在这里记录一下


一、Ajax是什么?

Ajax 是与服务器交换数据并更新部分网页的艺术,它不重新加载整个页面。 ajax 是异步的 javascript和 xml(数据传输格式),是异步的 javascript 和 数据传输

什么是同步异步:
同步 阻塞,当前程序运行,必须等前一个程序运行完毕以后,才能运行。
异步 非阻塞,当前程序运行,和前面程序的运行没有任何关系。

说到这里介绍一下前后端数据传输的两种格式的特点:

xml数据传输格式(大型的门户网站  新浪、网易、凤凰网)
                优点:
                    1、种类丰富
                    2、传输量非常大
                缺点:
                    1、解析麻烦
                    2、不太适合轻量级数据

json数据传输格式(字符串) 95%移动端应用。
                优点:
                    1、轻量级数据
                    2、解析比较轻松
                缺点:
                    1、数据种类比较少
                    2、传输数据量比较小

二、使用步骤

1.创建一个异步对象。 注意:XMLHttpRequest IE8以下不兼容,IE8以下声明ajax的方法是ActiveXObject("Microsoft.XMLHTTP")

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

在IE浏览器中, 如果通过Ajax发送GET请求, 那么IE浏览器认为 同一个URL只有一个结果

2.设置请求方式和请求地址
需要先处理要传给服务器的数据对象

//判断是否有要传给服务器的数据
if (data) {
	data = querystring(data);
}
//将数据对象变为指定格式字符串
//?act=xxx&user=xxx&pass=xxx
function querystring(obj) {
    var str = "";
    for (var attr in obj) {
        str += attr + "=" + obj[attr] + "&";
    }
    //最后会多一个&符号,所以需要截取
    return str.substring(0, str.length - 1);
}
if (method == "get" && data) {
	url += "?" + data;
}

method:请求的类型;GET 或 POST

GET请求和POST请求的异同
相同点: 都是将数据提交到远程服务器
不同点:
1.提交数据存储的位置不同: GET请求会将数据放到URL后面, POST请求会将数据放到请求头中
2.提交数据大小限制不同: GET请求对数据有大小限制, POST请求对数据没有大小限制

GET/POST请求应用场景
GET请求用于提交非敏感数据小数据
POST请求用于提交敏感数据大数据

url:文件在服务器上的位置
async:true(异步)或 false(同步)

xmlhttp.open(method, url, async);

3.发送请求

注意:get请求和post请求有一点点的不同:
get请求:

xmlhttp.send();

post请求:

//必须在send方法之前,去设置请求的格式
xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//data为要提交给服务器的数据
xmlhttp.send(data);

4.监听状态的变化
这里需要补充两个知识点,

ajax状态码:
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪

http 状态码
200~299:都代表本次请求成功(具体的状态码及其代表的意思可以自己去百度哦)
304:客户端已经执行了GET,但文件未变化

在ajax中有一个onreadystatechange时间用来监听ajax状态码改变的改变

//监听ajax状态码改变行为
xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            //判断本次下载的状态吗是多少?
            if (xmlhttp.status >= 200 && xmlhttp.status <= 299 || xmlhttp.status == 304) {
                if (sucess) {
                    //如果成功并存在失败回调函数sucess将响应数据传给回调函数sucess
                    sucess(xmlhttp.responseText);
                }
            } else {
                if (error) {
                //如果失败并存在失败回调函数error,将响应数据传给回调函数error
                    error("error" + xmlhttp.status);
                }
            }
        }
    }

三、封装Ajax

/*不一样的元素
   method
   url
   data
   sucess
   error
   */
function ajax({ method = "get", url, data, sucess, error }) {
    //1.创建ajax对象
    var xmlhttp = null;
    try {
        xmlhttp = new XMLHttpRequest();
    } catch (error) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	//判断是否有要提交给服务器的数据
    if (data) {
        data = querystring(data);
    }
    //判断请求类型,如果有将数据对象变为指定格式字符串
    if (method == "get" && data) {
        url += "?" + data;
    }

    xmlhttp.open(method, url, true);
    
    //判断请求类型
    if (method.toLowerCase() == "get") {
        xmlhttp.send();
    } else {
        //必须在请求前设置请求格式
        xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xmlhttp.send(data);
    }
	//监听ajax状态码改变行为
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            //判断本次下载的状态吗是多少?
            if (xmlhttp.status >= 200 && xmlhttp.status <= 299 || xmlhttp.status == 304) {
                if (sucess) {
                    //如果成功并存在失败回调函数sucess将响应数据传给回调函数sucess
                    sucess(xmlhttp.responseText);
                }
            } else {
                if (error) {
                	//如果失败并存在失败回调函数error,将响应数据传给回调函数error
                    error("error" + xmlhttp.status);
                }
            }
        }
    }
}
//将数据对象变为指定格式字符串
//?act=xxx&user=xxx&pass=xxx
function querystring(obj) {
    var str = "";
    for (var attr in obj) {
        str += attr + "=" + obj[attr] + "&";
    }
    //最后会多一个&符号,所以需要截取
    return str.substring(0, str.length - 1);
}

总结

Ajax的基本知识及使用方法到这里就结束了。后边的路还很长,加油!共勉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值