我的编程空间,编程开发者的网络收藏夹
学习永远不晚

jquery项目中如何防重复提交详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

jquery项目中如何防重复提交详解

在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的项目中,没有axios。但是导入Ajax-hook
就可以实现

Ajax-hook源码地址 : https://github.com/wendux/Ajax-hook

导入


<script class="lazy" data-src="https://unpkg.com/ajax-hook@2.0.3/dist/ajaxhook.min.js"></script>

ah对象是在导入ajaxhook.min.js后就会出现的,使用:


ah.proxy({
    //请求发起前进入
    onRequest: (config, handler) => {
        console.log(config.url)
        handler.next(config);
    },
    //请求发生错误时进入,比如超时;注意,不包括http状态码错误,如404仍然会认为请求成功
    onError: (err, handler) => {
        console.log(err.type)
        handler.next(err)
    },
    //请求成功后进入
    onResponse: (response, handler) => {
        console.log(response.response)
        handler.next(response)
    }
})

其中,config.method为ajax请求的方式(GET/POST),config.url为请求的路径。onError中的err对象和onResponse中的response可以通过err.config.method/response.config.method来获得ajax的请求方式。

我稍微封装了一下,实现防重复提交的js文件,亲测有效,朋友们可以后再测试一下,欢迎各路大神谈论和指出不足。


```javascript
function laodJS(url, callback) {
  var script = document.createElement('script');
  fn = callback || function() {};
  script.type = 'text/javascript';
  script.defer = true;
  // IE
  if (script.readyState) {
    script.onreadystatechange = function() {
      if (script.readyState == 'loaded' || script.readyState == 'complete') {
        script.onreadystatechange = null;
        fn();
      }
    }
  } else {
    // 其他浏览器
    script.onload = function() {
      fn();
    }
  }
  script.class="lazy" data-src = url;
  document.getElementsByTagName('body')[0].appendChild(script);
}
laodJS('https://unpkg.com/ajax-hook@2.0.3/dist/ajaxhook.min.js', function() {
  let ajaxArr = []
  ah.proxy({
    //请求发起前进入
    onRequest: (config, handler) => {
      var id = config.method + config.url
      if (ajaxArr.indexOf(id) === -1) {
        // 给每个请求设置唯一ID,push到ajaxArr里。在请求完成时再移除那个项
        ajaxArr.push(id)
        handler.next(config);
      } else {
        return handler.reject()
      }
    },
    //请求发生错误时进入,比如超时;注意,不包括http状态码错误,如404仍然会认为请求成功
    onError: (err, handler) => {
      var id = err.config.method + err.config.url
      if (ajaxArr.indexOf(id) !== -1) {
        ajaxArr.splice(ajaxArr.indexOf(id), 1)
      }
      handler.next(err)
    },
    //请求成功后进入
    onResponse: (response, handler) => {
      var id = response.config.method + response.config.url
      if (ajaxArr.indexOf(id) !== -1) {
        ajaxArr.splice(ajaxArr.indexOf(id), 1)
      }
      handler.next(response)
    }
  })
})

直接在全局中引入这个文件就可以了,我这个文件命名为preventRepeatSubmission.js。

我的HTML代码:


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>This is index Page</h1>
  <ul>
    <li><a href="/">/</a></li>
    <li><a href="/index">index页面</a></li>
    <li><a href="/404">404页面</a></li>
    <li><a href="/info">info页面</a></li>
    <li><a href="/nofound">nofound</a></li>
  </ul>
  <button id="sendMsg">请求拦截器</button>
  <script class="lazy" data-src="./jquery.min.js"></script>
  <!-- <script class="lazy" data-src="https://unpkg.com/ajax-hook@2.0.3/dist/ajaxhook.min.js"></script> -->
  <script class="lazy" data-src="./preventRepeatSubmission.js"></script>
  <script>
    document.getElementById("sendMsg").addEventListener("click", function() {
      $.ajax({
        url: 'http://localhost:3000/home',
        type: 'GET',
        success: function(data) {
          console.log('success', data)
        }
      })
    })
  </script>
</body>
</html>

我的服务器使用koa2搭建的,代码如下:


const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();

router
  .get('/', (ctx, next) => {
    ctx.body = '<h1>hello jspang</h1>';
  })
  .get('/home', async (ctx, next) => {
    // ctx.body = '<h1>This is home Page</h1>'
    async function delay(time) {
      return new Promise(function(resolve, reject) {
        setTimeout(function(){
          resolve();
        }, time);
      });
    };
    await delay(5000);
    const url = ctx.url;
  
    // 在request中获取get请求参数
    const request = ctx.request;
    const request_query = request.query;
    const request_querystring = request.querystring;

    // 在ctx中获取get请求的参数
    const ctx_query = ctx.query;
    const ctx_querystring = ctx.querystring;
    ctx.body = {url, request_query, request_querystring, ctx_query, ctx_querystring};
    ctx.response.body = {status:200, msg:'已经成功获得参数'};
  })

app
  .use(router.routes())   // 向app中装载路由
  .use(router.allowedMethods())   // 装载中间件

app.listen(3000, () => {
  console.log('[Demo] is running at port 3000');
});

浏览器测试效果:

按下图中的button就会发起一次ajax请求,我的服务器是延迟响应5s的,在这延迟5s期间,我有点击了20次button,发起相同的20次ajax被成功拦截了,效果不错。

总结

到此这篇关于jquery项目中如何防重复提交的文章就介绍到这了,更多相关jquery防重复提交内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

jquery项目中如何防重复提交详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

jquery项目中如何进行防重复提交

这篇文章给大家介绍jquery项目中如何进行防重复提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的项目中,没有axios。但是导入Ajax
2023-06-25

springmvc中如何防止表单重复提交

这篇文章给大家介绍springmvc中如何防止表单重复提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、通过session中的token验证初始化页面时生成一个唯一token,将其放在页面隐藏域和session中拦
2023-06-20

java后台防止表单重复提交方法详解

这篇文章主要介绍了后台防止表单重复提交,利用Session防止表单重复提交,判断请求url和数据是否和上一次相同,利用SpringAOP和redis的锁需要的朋友可以参考下
2022-12-24

理解 PHP 中的防抖和防重复提交的原理

一、防抖的原理防抖是指阻止连续触发的技术,常用于优化用户体验,减少不必要的请求或操作。在 PHP 中,我们可以通过 JavaScript 或 Ajax 调用完成防抖的实现。原理防抖的原理很简单,就是在一定的时间内,多次触发事件只执行最后一次
2023-10-21

如何在 PHP 中实现防抖和防重复提交的功能

在Web开发中,防抖和防重复提交是两个常见的问题。防抖用于处理频繁触发的事件,防止过度请求;而防重复提交则是为了避免用户多次提交相同的表单。本文将介绍如何在PHP中实现这两个功能,并提供具体的代码示例。一、防抖功能实现防抖功能主要是在一定的
2023-10-21

web中如何处理重复提交、重复刷新、防止后退的问题

这篇文章主要介绍web中如何处理重复提交、重复刷新、防止后退的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一。前言 你在任何一个比较专业的BBS都会看到这样的问题,即使你Google一下,也会发现有很多的人在关
2023-06-08

如何在 PHP 中实现防抖功能,避免重复提交

防抖功能是指在用户连续触发某个事件时,只执行一次事件处理函数,并且在最后一次触发后的一段时间内不会再执行。在实际的开发中,经常会遇到用户重复提交表单的情况,使用防抖功能可以有效地避免这种情况的发生。在 PHP 中实现防抖功能的方法有很多,下
2023-10-21

提交gRPC-spring-boot-starter项目出现bug如何修复

这篇文章主要介绍“提交gRPC-spring-boot-starter项目出现bug如何修复”,在日常操作中,相信很多人在提交gRPC-spring-boot-starter项目出现bug如何修复问题上存在疑惑,小编查阅了各式资料,整理出简
2023-06-29

java开发中防止重复提交的几种解决方案

我们日常开发中有很多的应用场景都会遇到重复提交问题,下面这篇文章主要给大家介绍了关于java开发中防止重复提交的几种解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

PHP 防抖和防重复提交技术:如何选择合适的方案

在 Web 开发中,防抖和防重复提交是两个常见的技术需求。在处理用户交互或表单提交等场景中,我们需要确保用户在一定时间内只能触发一次请求,避免重复提交或者频繁请求的问题。本文将讨论如何选择适合的方案,并提供具体的 PHP 代码示例。一、防抖
2023-10-21

jquery序列化提交中文乱码如何解决

这篇文章主要介绍“jquery序列化提交中文乱码如何解决”,在日常操作中,相信很多人在jquery序列化提交中文乱码如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery序列化提交中文乱码如何解决
2023-07-05

jQuery中如何防止相同事件快速重复触发

本篇内容主要讲解“jQuery中如何防止相同事件快速重复触发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jQuery中如何防止相同事件快速重复触发”吧!重复触发就是防止用户重复点击提交数据了,
2023-06-17

如何解决java项目中的防盗链

本篇文章给大家分享的是有关如何解决java项目中的防盗链,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.防盗链的概念内容不在自己的服务器上,通过技术手段将其他网站的内容(比如
2023-05-31

编程热搜

目录