一个简单的Ajax请求案例


首先使用express 搭建一个服务器:

const express = require("express");
const app = express();

app.get('/server',function(req,resp){
    //设置响应头
    resp.setHeader("Access-Control-Allow-Origin","*");
    resp.send("hello,Ajax");
})

app.listen(3000,function(){
    console.log("服务器已启动,3000端口监听中...")
})

HTML页面如下:Ajax将服务器发出的内容响应给了浏览器页面id为result的div元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax Document</title>

    <style>
        #result{
            width:200px;
            height:100px;
            border:solid 1px #90b;
        }
    </style>
</head>
<body>
   <button>点击发送请求</button>
   <div id="result"></div>
 
   <script>
       const btn = document.getElementsByTagName("button")[0];
       var result = document.getElementById("result");
       btn.onclick = function(){
        //1.创建对象
        const xhr = new XMLHttpRequest()
        //2.初始化,设置请求方法和url
        xhr.open('GET','http://localhost:3000/server',)
        //3.发送
        xhr.send();
        //4.事件绑定 处理服务端返回的结果
        //readystate 是 xhr对象中的属性,表示状态:0,1,2,3,4
        xhr.onreadystatechange = function(){
            // 判断
            if(xhr.readyState == 4){
                //判断响应状态码 200 404 403 401 500

                if(xhr.status >=200 && xhr.status < 300){
                    // //处理结果  行 头 空行 体 
                    // console.log(xhr.status);
                    // console.log(xhr.statusText);
                    // console.log(xhr.getAllResponseHeader);
                    // console.log(xhr.response);
                    //响应
                    result.innerHTML =xhr.response;
                }
            }
        }

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

moseover响应ajax请求

服务器设置发送信息:

const express = require("express");
const app = express();

app.get('/server',function(req,resp){
    //设置响应头
    resp.setHeader("Access-Control-Allow-Origin","*");
    resp.send("hello,Ajax");
})

app.listen(3000,function(){
    console.log("服务器已启动,3000端口监听中...")
})

app.post('/server',function(req,resp){
    //设置响应头
    resp.setHeader("Access-Control-Allow-Origin","*");
    resp.send("hello,Ajax from post");
})

 

html及js相关代码:

<body>
   <button>点击发送请求</button>
   <div id="result"></div>
 
   <script>
       const btn = document.getElementsByTagName("button")[0];
       var result = document.getElementById("result");
       btn.onclick = function(){
        //1.创建对象
        const xhr = new XMLHttpRequest()
        //2.初始化,设置请求方法和url
        xhr.open('GET','http://localhost:3000/server?a=100&b=200&c=300')
        //设置请求头
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
        //3.发送
        // xhr.send('a=100&b=200&c=300');
        xhr.send('a:100,b:200,c;300')
        //4.事件绑定 处理服务端返回的结果
        //readystate 是 xhr对象中的属性,表示状态:0,1,2,3,4
        xhr.onreadystatechange = function(){
            // 判断
            if(xhr.readyState == 4){
                //判断响应状态码 200 404 403 401 500

                if(xhr.status >=200 && xhr.status < 300){
                    // //处理结果  行 头 空行 体 
                    // console.log(xhr.status);
                    // console.log(xhr.statusText);
                    // console.log(xhr.getAllResponseHeader);
                    // console.log(xhr.response);
                    //响应
                    result.innerHTML =xhr.response;
                }
            }
        }

       }
   </script>
</body>

keydown响应ajax请求并使用json传输数据

设置服务器和需要传输的数据:

app.all('/json-server',function(req,resp){
    //设置响应头
    resp.setHeader("Access-Control-Allow-Origin","*");
    const data ={'name':'atguigu'};
    let str = JSON.stringify(data);
    resp.send(str);
})

 

html和js代码如下:

<body>
    <div id="result"></div>

    <script>
        const result = document.getElementById("result");
        window.onkeydown =function(){
            const xhr = new XMLHttpRequest();
            //设置响应体数据类型
            xhr.responseType="json";
            xhr.open('GET','http://localhost:3000/json-server');
            xhr.send();
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        //手动对数据转换
                        // let data = JSON.parse(xhr.response);
                        // console.log(data);
                        // result.innerHTML=data.name;
                        //自动转换(通过设置xml数据响应格式)
                        result.innerHTML= xhr.response.name;

                    }
                }
            }
        }
    </script>
</body>
解决IE浏览器缓存问题,加上当前实时日期
xhr.open('GET','http://localhost:3000/ie-server?t='+Date.now());

超时及网络异常的Ajax处理:

<body>
    <button>点击发送请求</button>
    <div id="result"></div>

    <script>
        const btn = document.getElementsByTagName("button")[0];
        const result = document.querySelector("#result");
        btn.addEventListener('click',function(){
             //1.创建对象
             const xhr = new XMLHttpRequest();
             //超时设置2s
             xhr.timeout=2000;
            //超时回调
             xhr.ontimeout=function(){
                 alert("网络异常,请稍后尝试")
             }
             //网络异常回调
             xhr.onerror = function(){
                 alert("你的网络似乎出了一些问题")
             }
            //2.初始化,设置响应类型和url,解决IE浏览器缓存问题,加上当前实时日期
            xhr.open('GET','http://localhost:3000/delay');
            //3.发送
            xhr.send();
            //4.时间绑定
            xhr.onreadystatechange=function(){
                if(xhr.readyState == 4){
                    if(xhr.status >=200 && xhr.status < 300){
                        result.innerHTML = xhr.response;
                    }
                }
            }
        })

    </script>
</body>

调用abort方法取消ajax请求:

<body>
    <button>发送请求</button>
    <button>取消请求</button>

    <script>
        const btns = document.querySelectorAll("button");
        let xhr = null;
        //单击事件获取ajax请求
        btns[0].onclick = function(){
            xhr = new XMLHttpRequest();
            xhr.open('GET','http://localhost:3000/delay');
            xhr.send();
            
        }
        //调用abort方法取消ajax请求
        btns[1].onclick = function(){
            xhr.abort();
        }

        
    </script>
</body>

ajax处理重复请求:

<body>
    <button>发送请求</button>
    

    <script>
        const btns = document.querySelectorAll("button");
        let xhr = null;
        //标识变量
        let isSending = false;//是否正在发送AJAX请求
        //单击事件获取ajax请求
        btns[0].onclick = function(){
            //判断标识变量,如果标识变量为false,则取消当前请求,创建一个新的请求
            if(isSending) xhr.abort();
            xhr = new XMLHttpRequest();
            //修改变量标识
            isSending = true;
            xhr.open('GET','http://localhost:3000/delay');
            xhr.send();
            xhr.onreadystatechange =function(){
                if(xhr.readyState === 4){
                    isSending = false;
                }
            }        
        }
        
    </script>
</body>

 

Jquery中的Ajax请求:

<body>
    <div class="container">
        <h2 class="page-header">Jquery 发送Ajax请求</h2>
        <button class="btn btn-primary">GET</button>
        <button class="btn btn-danger">POST</button>
        <button class="btn btn-info">通用型方法</button>
    </div>
    
    <script>
        $("button").eq(0).click(function(){
            $.get('http://localhost:3000/jquery-server',{a:100,b:100},function(data){
                console.log(data);
            },'json');
        })
        $("button").eq(1).click(function(){
            $.get('http://localhost:3000/jquery-server',{a:100,b:100},function(data){
                console.log(data);
            });
        })
        $("button").eq(2).click(function(){
            $.ajax({
                //url
                url:'http://localhost:3000/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:300,
                    d:400
                },      
            })
        })
    </script>
</body>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM