• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

AJAX (4) — AJAX请求时和缓存问题 、取消请求、请求重复发送问题

武飞扬头像
吃不到棒棒糖的小熊
帮助1

目录

一、AJAX请求超时与缓存问题 

  1.server.js文件         

  2.html文件

二、AJAX取消请求

三、AJAX请求重复发送问题


nodemon自动重启工具

nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序。

安装命令:npm install -g nodemon

一、AJAX请求超时与缓存问题 

  先设计出一个需求:

        点击按钮,向服务端发送请求,服务端返回结果,加一个超时设置,时间为2s,若2s后没有返回结果,则给用户一个提醒"网络超时,请稍后重试"

        完成该需求需要准备前端与服务端内容,准备一个html文件和一个js文件 

  1.server.js文件         

  1.  
    //1.引入express
  2.  
    const { response } = require('express');
  3.  
    const express = require('express');
  4.  
     
  5.  
    //2.创建应用对象
  6.  
    const app = express()
  7.  
     
  8.  
    //3.创建路由规则
  9.  
    app.get('/delay', (request, response) => {
  10.  
    //设置响应头,设置允许跨域
  11.  
    response.setHeader('Access-Control-Allow-Origin', '*')
  12.  
    setTimeout(() => {
  13.  
    //设置响应体
  14.  
    response.send('延时响应')
  15.  
    }, 3000)
  16.  
    });
  17.  
     
  18.  
    //4.监听端口启动服务
  19.  
    app.listen(5000, () => {
  20.  
    console.log('服务已经启动,5000端口监听中....');
  21.  
    })
学新通

  2.html文件

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.  
    <title>请求超时与网络异常</title>
  8.  
    <style>
  9.  
    #result{
  10.  
    width: 200px;
  11.  
    height: 100px;
  12.  
    border:solid 1px #90b;
  13.  
    }
  14.  
    </style>
  15.  
    </head>
  16.  
    <body>
  17.  
    <button>点击发送请求</button>
  18.  
    <div id="result"></div>
  19.  
    <script>
  20.  
    const btn = document.getElementsByTagName('button')[0];
  21.  
    const result = document.getElementById('result')
  22.  
    btn.addEventListener('click',function(){
  23.  
    const xhr = new XMLHttpRequest();
  24.  
    //超时设置 2s
  25.  
    xhr.timeout = 2000;
  26.  
    //超时回调
  27.  
    xhr.ontimeout = function(){
  28.  
    alert("网络异常,请稍后重试!")
  29.  
    }
  30.  
    //网络异常回调
  31.  
    xhr.onerror = function(){
  32.  
    alert('你的网络似乎出了一些问题')
  33.  
    }
  34.  
    xhr.open('GET','http://127.0.0.1:5000/delay');
  35.  
    xhr.send();
  36.  
    xhr.onreadystatechange = function(){
  37.  
    if(xhr.readyState === 4){
  38.  
    if(xhr.status >= 200 && xhr.status < 300){
  39.  
    result.innerHTML = xhr.response;
  40.  
    }
  41.  
    }
  42.  
    }
  43.  
    })
  44.  
    </script>
  45.  
    </body>
  46.  
    </html>
学新通

二、AJAX取消请求

        设计一个需求,有两个按钮,点击第一个向服务器发送请求,点击第二个取消请求,如下图:

学新通

调用 abort 方法 手动取消ajax请求

        server.js文件不改变,html文件如下:

  1.  
    <body>
  2.  
    <button>点击发送</button>
  3.  
    <button>点击取消</button>
  4.  
    <script>
  5.  
    //获取元素对象
  6.  
    const btns = document.querySelectorAll('button');
  7.  
    let x = null;
  8.  
     
  9.  
    btns[0].onclick = function(){
  10.  
    x = new XMLHttpRequest();
  11.  
    x.open("GET","http://127.0.0.1:5000/delay");
  12.  
    x.send();
  13.  
    }
  14.  
    //调用abort方法手动取消ajax请求
  15.  
    btns[1].onclick = function(){
  16.  
    x.abort()
  17.  
    }
  18.  
    </script>
  19.  
    </body>
学新通

三、AJAX请求重复发送问题

         设计一个需求,点击按钮向服务器发送请求,再次点击时,如果正在发送上一个请求,则取消该请求,创建一个新请求,如下图:

学新通

        server.js文件不改变,html文件如下:

  1.  
    <body>
  2.  
    <button>点击发送</button>
  3.  
    <script>
  4.  
    //获取元素对象
  5.  
    const btns = document.querySelectorAll('button');
  6.  
    let x = null;
  7.  
    //标识变量
  8.  
    let isSending = false;//是否正在发送AJAX请求
  9.  
     
  10.  
    btns[0].onclick = function(){
  11.  
    //判断标识变量
  12.  
    if(isSending) x.abort();//如果正在发送,则取消该请求,创建一个新的请求
  13.  
    x = new XMLHttpRequest();
  14.  
    //修改标识变量的值
  15.  
    isSending = true;
  16.  
    x.open("GET","http://127.0.0.1:5000/delay");
  17.  
    x.send();
  18.  
    x.onreadystatechange = function(){
  19.  
    if(x.readyState === 4){
  20.  
    //修改标识变量
  21.  
    isSending = false;
  22.  
    }
  23.  
    }
  24.  
    }
  25.  
    </script>
  26.  
    </body>
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaebbg
系列文章
更多 icon
同类精品
更多 icon
继续加载