AJAX操作

目录

           AJAX请求的基本操作

要引入express框架

对其基本设置

在进行数据的AJAX操作

给AJAX设置请求参数

设置请求头信息

AJAX-服务器响应JSON数据


1-AJAX请求的基本操作

1.要引入express框架

2.对其基本设置

//1.引入express
const express = require('express');

//2.创建应用对象
const app = express();

//3.创建路由规则
//request 是对请求报文的封装
//response 是对响应报文的封装
app.get('/server', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin','*');

    
    //设置响应体
    response.send("HELLO AJAX");
});

//4.监听端口启动服务
app.listen(8111, () => {
    console.log("服务已经启动,8111端口监听中....")
})

3.在进行数据的AJAX操作

<body>
    <button id="btnn">点击发送按钮</button>
    <div id="result"></div>

    <script>
        //获取button元素
        const btn = document.getElementById("btnn");
        const result = document.getElementById("result");
        //绑定事件
        btn.onclick = function(){
            //1.创建对象
            const xhr = new XMLHttpRequest;
            //2.初始化 设置请求方法 和 url
            xhr.open('GET','http://127.0.0.1:8111/server');
            //3.发送
            xhr.send();
            //4.时间绑定  处理服务器端返回的结果
            //on when 当....时候
            //readystate 是 xhr 对象中的属性, 表示状态 0 1 2 3 4
            //change 改变
            xhr.onreadystatechange = function(){
                //判断(服务端返回了所有的结果)
                if(xhr.readyState === 4){
                    //判断响应状态码 200 404 403 401 500
                    //2xx 表示2开头就为成功
                    if(xhr.status >= 200 && xhr.status<300){
                        //处理结果 行 头 空行 体
                        //1.响应体
                        // console.log(xhr.status);//状态码
                        // console.log(xhr.statusText);//状态字符串
                        // console.log(xhr.getAllResponseHeaders());//所有响应头
                        // console.log(xhr.response);//响应体


                        //设置 result 的文本
                        result.innerHTML = xhr.response; 
                    }else{

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

给AJAX  GET请求设置请求参数

xhr.open('GET','http://127.0.0.1:8111/server?a=100&b=200&c=300');

AJAX发送POST请求

    <div id="result"></div>
    <script>
        //获取元素对象
        const result = document.getElementById("result");
        //绑定事件
        result.addEventListener("mouseover",function(){
            //1.创建对象
            const xhr = new XMLHttpRequest();
            //2.初始化 设置类型与 URL
            xhr.open('POST','http://127.0.0.1:8111/server');
            //3.发送
            xhr.send();
            //4.事件绑定
            xhr.onreadystatechange = function(){
                //判断
                if(xhr.readyState == 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        //处理服务端返回的结果
                        result.innerHTML = xhr.response;
                    }
                }
            }
        })
    </script>
app.get('/server', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin','*');

    
    //设置响应体
    response.send("HELLO AJAX");
});

app.post('/server', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin','*');

    
    //设置响应体
    response.send("HELLO AJAX POST");
});


给POST请求设置参数

            xhr.send('a=100&b=200&c=300');
            xhr.send('a:100&b:200&c:300');
            xhr.send('123345123')

设置请求头信息

            //2.初始化 设置类型与 URL
            xhr.open('POST','http://127.0.0.1:8111/server');
            //设置请求头信息
            //xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
            //3.发送
            //xhr.send();

AJAX-服务器响应JSON数据

app.all('/json-server', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin','*');
    //响应头
    response.setHeader('Access-Control-Allow-Headers','*');
    //响应一个数据
    const data = {
        name:'atguigu'
    };
    //对对象进行字符串转换
    let str = JSON.stringify(data);
    //设置响应体
    response.send(str);
});
    <div id="result"></div>
    <script>
        //绑定键盘按下事件
        window.onkeydown = function(){
            //new对象
            const xhr = new XMLHttpRequest();
            //初始化
            xhr.open('GET','http://127.0.0.1:8111/json-server');
            //发送
            xhr.send();
            //事件绑定
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status >= 200 && xhr.status <300){
                        //
                        // console.log(xhr.response);
                        // result.innerHTML = xhr.response;
                        //手动对数据转换
                        let data = JSON.parse(xhr.response);
                        console.log(data)
                        result.innerHTML = data.name;
                        //自动对数据转换
                        // console.log(xhr.response);
                        // result.innerHTML = xhr.response.name;
                    }
                }
            }
        }
    </script>

nodemon自动重启插件安装

终端输入   npm install -g nodemon

IE缓存问题 

        btn.addEventListener('click',function(){
            const xhr = new XMLHttpRequest();
            xhr.open("GET",'HTTP:127.0.0.1:8111/ie?t='+ Date.now());
            xhr.send();
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        result.innerHTML = xhr.response;
                    }
                }
            }
        })
//针对 IE 缓存
app.get('/ie', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    //设置响应体
    response.send("HELLO ie 2");
})

AJAX请求超时与网络异常处理

//请求超时与网络异常处理  延时响应
app.get('/delay', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    setTimeout(()=>{
    //设置响应体
    response.send("延时响应");
    },3000)
})
const xhr = new XMLHttpRequest();
            //超时设置2s 设置
            xhr.timeout = 2000;
            //超时回调
            xhr.ontimeout = function(){
                alert("网络异常,请稍后再试!!")
            }

            //网络异常回调
            xhr.onerror =function(){
                alert("你的网络似乎出现一些问题!!")
            }

AJAX - 取消请求

       //获取元素对象
        const btns = document.querySelectorAll('button');
        let xhr = null;

        btns[0].onclick = function(){
            xhr = new XMLHttpRequest();
            xhr.open("GET",'HTTP:127.0.0.1:8111/delay');
            xhr.send();
        }

        //abort
        btns[1].onclick = function(){
            xhr.abort();
        }

AJAX请求重复发送问题处理

        //获取元素对象
        const btns = document.querySelectorAll('button');

        let xhr = null;
        //标识变量
        let isSending = false; //是否正在发送AJAX请求

        btns[0].onclick = function(){
            if(isSending) xhr.abort(); //如果正在发送请求,则取消改请求,创建一个新的请求
            xhr = new XMLHttpRequest();
            isSending = true;
            xhr.open("GET",'HTTP:127.0.0.1:8111/delay');
            xhr.send();
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    //修改标识变量
                    issending = false;
                }
            }
        }

Jquery发送AJAX请求(3种)

    <div>jQuery 发送 AJAX 请求</div>
    <button>GET</button>
    <button>POST</button>
    <button>通用型方法</button>
    <script>
        $('button').eq(0).click(function(){
            $.get('http://127.0.0.1:8111/jquery-server',{a:100,b:200}, function(data){
                console.log(data);
            },'json')
        })
        $('button').eq(1).click(function(){
            $.post('http://127.0.0.1:8111/jquery-server',{a:100,b:200}, function(data){
                console.log(data);
            })
        })
        $('button').eq(2).click(function(){
            $.ajax({
                //url
                url:'http://127.0.0.1:8111/jquery-server',
                //参数
                data:{a:100,b:200},
                //请求参数
                type:'GET',
                //设置响应体结果
                dataType:'json',
                //成功的回调
                success:function(data){
                    console.log(data);
                },
                //超时时间
                timeout:2000,
                //失败的回调
                error:function(){
                    console.log('出错了!!');
                },
                //头信息
                headers:{   
                    c:200,
                    b:300
                }
            });
        });
    </script>
//jQuery 服务
app.all('/jquery-server', (request, response) => {
    //设置响应头 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');

    response.setHeader('Access-Control-Allow-Headers', '*');
    //response.send('Hello jQuery AJAX');
    const data = {name:'小孩子'};
    //response.send('Hello jQuery AJAX');
    response.send(JSON.stringify(data));

})

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值