AJAX

什么是AJAX?
不用加载整个页面只用更新部分页面----用来做数据的交互
异步的JavaScript和xml
原理:通过xmlHttpRequest对象向服务器发送异步请求,从而从服务器中获取数据,然后把数据通过js来操作dom从而达到渲染页面的效果

用于客户端和服务器端交换数据,可以实现在不重新加载整个页面的 情况下对页面进行部分更新
核心:xmlHttpRequest对象
特点:异步加载,局部更新

注意:凡是用ajax从服务器获取数据,不能使用文件协议,遵循的是http协议
优势:页面局部更新,提高用户体验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //1.创建XMLHttpRequest对象对象&ndash;&gt;用户与服务器交换数据
    var xhr=new XMLHttpRequest();
    //2.规定请求的类型(get  post),请求的url的地址,是否异步(bool),默认就是异步
    xhr.open('get','test.html');
    //发送请求到服务器
    xhr.send();
    //等待响应,因为不知道什么时候响应成功,所以使用事件机制去触发响应
    xhr.onreadystatechange=function () {
        console.log(this.readyState);
        //判断
        if (this.readyState==4 && this.readyState==200) {
            console.log(this.responseText);//获取相应的文本
            document.querySelector("#dv").innerHTML=this.responseText;
        }
    }
</script>
<h1>我的页面</h1>
<div id="dv"></div>

</body>
</html>

readyState的状态

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //1.创建XMLHttpRequest对象对象&ndash;&gt;用户与服务器交换数据
    var xhr=new XMLHttpRequest();
    console.log(xhr.readyState);//0 请求未初始化
    //2.规定请求的类型(get  post),请求的url的地址,是否异步(bool),默认就是异步
    xhr.open('get','test.html');
    console.log(xhr.readyState);//1 服务器连接已建立
    //3.发送请求到服务器
    xhr.send();
    console.log(xhr.readyState);//1 服务器连接已建立
    //4响应请求
    xhr.onreadystatechange=function () {
        console.log(xhr.readyState);//2  3  4
        switch (this.readyState) {
            case 2://请求已经接受
                console.log(this.getAllResponseHeaders('date'));//获取其中的一个响应头
                //获取所有响应头
                console.log(this.getAllResponseHeaders());
                console.log(this.responseText);//不能获取到响应数据
                break;
            case 3://请求处理中,数据可能不完整
                console.log(this.responseText);//可以获取到响应的数据0
                break;
            case 4://请求已完成,且响应已就绪
                console.log(this.responseText);//获取完整响应内容
                break;

        }

    }
</script>
</body>
</html>

get请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>

</ul>
<script>
var xhr=new XMLHttpRequest();
xhr.open('get','contacts.json');
xhr.send();
xhr.onreadystatechange=function () {
    if (this.readyState!=4) return;

console.log(typeof this.responseText);//string
//序列化,将字符串转换为json格式数据JSON.parse()
    //反序列化:将json字符串转换成object
//将相应的字符串转换成json对象格式数据
var data= JSON.parse(this.responseText);

for (var i=0;i<data.length;i++) {
var obj=data[i]
var liObj=document.createElement("li");
document.querySelector("ul").appendChild(liObj);
liObj.innerHTML=obj.name;
}
}
</script>
</body>
</html>

post请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--<form action="test.html" method="get">
    用户名:<input type="text" name="username">
    <input type="submit" value="提交">
</form>-->
<script>
    //get请求将数据显示在地址栏不安全
    //get一般用于服务器请求数据
    //post一般是业务数据,表单提交,用户登录,post获取数据
</script>
<input type="text" id="txt">
<input type="button" value="提交" id="sub">
<script>
    document.querySelector("#sub").onclick=function () {
        var data=document.querySelector("#txt").value;
        var xhr=new XMLHttpRequest();
        xhr.open('post','http://www.liulongbin.top:3005/api/addproduct');
        xhr.setRequestHeader("Content-Type",'application/x-www-form-urllencoded')
        xhr.send("name="+data);
        xhr.onreadystatechange=function () {
            if (this.readyState != 4) return;
            console.log(this.responseText);
        }
    }
</script>
</body>
</html>

异步加载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /**
     * ajax的优点:异步加载,局部更新--页面加载快一些,用户体验好一些
     * 同步:一次执行一个,前面的代码没有执行完成,后面的就排队,不能开始
     *异步:一次执行一堆,前面一个没有完成,后面的也能开始
     * ajax的缺点:破坏浏览器机制,安全性不高
     */
    //异步操作
    console.log(111);
    var xhr=new XMLHttpRequest();
    xhr.open('get','test.html',true);
    xhr.send();
    xhr.onreadystatechange=function () {
        if (this.readyState==4){
            console.log(222);
        }
    }
    console.log(333.);
</script>
</body>
</html>

jquery中的ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="dv"></div>
<script src="jquery-1.8.3.min.js"></script>
<script>
    /**
     * load:载入远程HTML,文件代码并插入到DOM中
     * load()的使用,$(对象).load('url路径',(属性,属性值),成功的 回调函数(response,status)
     */
    $("#dv").load('test.html',{'name':'小明','age':12},function (res,status) {
        console.log(res);
        console.log(status);
    })
</script>
</body>
</html>

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值