1. 程式人生 > >Jquery的$.ajax防止重複提交的方法

Jquery的$.ajax防止重複提交的方法

1、第一種,對於onclick事件觸發的的ajax

可以採用如下方法:
即在beforeSend中使點選按鈕不可用,ajax結果返回後置為可用

   $.ajax(
    {
        type: 'POST',
        url: APP+'?m=Shopping&a=ajaxSubmitorder&sid='+sid+'&src='+src,
        cache:false,
        dataType: 'json',
        data: {'src':src,"uid": uid,'shipping_id':shipping_id,'order_amount'
:order_amount,'amount':amount,'postscript':postscript,'addr_id':addr_id}, async: false, beforeSend:function() { //觸發ajax請求開始時執行 $('#submit_font').text('提交訂單中...'); $('.pay_alipay').attr('onclick','javascript:void();');//改變提交按鈕上的文字並將按鈕設定為不可點選 }, success: function
(msg, textStatus) {
if(msg.result==1) { $.Alert('成功提交訂單', 160); window.location.href=APP+'?m=Pay&a=index&sid='+ sid + '&fuid='+ fuid + '&parent_order_sn='+msg.parent_order_sn; } else { $.Alert(msg.msg, 160
); $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','submitorder();');//改變提交按鈕上的文字並將按鈕設定為可點選 } }, error: function (textStatus) { $.Alert('網路繁忙,請稍後再試...', 160); $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','submitorder();');//改變提交按鈕上的文字並將按鈕設定為可點選 }, complete: function(msg, textStatus) { //ajax請求完成時執行 if(msg.result==1) { $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','javascript:void();');//改變提交按鈕上的文字並將按鈕設定為可以點選 } } });

2、利用jquery ajaxPrefilter中斷請求

1)Prefilters是一個預過濾器,在每個請求之前被髮送和$.ajax()處理它們前處理。

options 是請求的選項

originalOptions 值作為提供給Ajax方法未經修改的選項,因此,沒有ajaxSettings設定中的預設值

jqXHR 是請求的jqXHR物件

以上內容的核心思想是維護一個佇列,傳送請求時,將請求加入佇列,請求響應後,從佇列中清除,這就保證了在任一時刻只能有一個同樣的請求傳送.

侷限性:僅僅是前臺防止jquery的ajax請求。對於非jquery的ajax請求,不起作用。因為使用的是jquery的ajaxPreFilter函式,僅僅對jquery的ajax請求有作用。

2)按鈕每次點選都會向後端傳送請求,下面的demo實現了多次點選按鈕之後,只保證最後一次點選的請求能夠成功。

<button id="button1">button1</button>
<button id="button2">button2</button>
<button id="button3">button3</button>       
 <script type="text/javascript" src="jquery.min.js"></script>
<script>
        var pendingRequests = {};
        jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
            var key = options.url;
            console.log(key);
            if (!pendingRequests[key]) {
                pendingRequests[key] = jqXHR;
            }else{
                //jqXHR.abort();    //放棄後觸發的提交
                pendingRequests[key].abort();   // 放棄先觸發的提交
            }

            var complete = options.complete;
            options.complete = function(jqXHR, textStatus) {
                pendingRequests[key] = null;
                if (jQuery.isFunction(complete)) {
                complete.apply(this, arguments);
                }
            };
        });
        <!-- 非同步載入應用列表開始 -->

        $("#button1").live("click", function() {
              $.ajax('config/ajax/appinfoListFetcher.json', {
                type:'POST',
                data:   {param1:1,
                         param2:2,
                      },
                success: function(res){
                        //後端資料回寫到頁面中
                },
                error:function(jqXHR, textStatus, errorThrown){
                    if(errorThrown != 'abort'){
                        alert('應用載入失敗!');
                    }
                }
              });
              <!-- 非同步載入應用列表結束 -->
         });
</script>

呼叫abort後jquery會執行error的方法,丟擲abort的異常資訊。可以使用以下方式區分出該型別的異常。

3)注意事項:對於巢狀的點選事件的程式碼,是不起作用的。

$('.btn-cancel-all').live('click',function()
{
    $('.confirm-dialog .confirm').live('click',function()
    {
        $.ajax({
            //這裡面的ajax事件是不能起作用的
        })
    }
}

相關推薦

jQuery的$ .ajax防止重複提交方法

  沒啥說的直接貼程式碼,很簡單: 第一種方式:的onclick點選事件型別 <SCRIPT> function member_del(obj,id){ var lock = false; //預設未鎖定 layer.confirm('確

Jquery的$.ajax防止重複提交方法

1、第一種,對於onclick事件觸發的的ajax 可以採用如下方法: 即在beforeSend中使點選按鈕不可用,ajax結果返回後置為可用 $.ajax( { type: 'POST', url: APP+

jquery a標籤不可點選,繫結bind/解除unbind點選,ajax防止重複提交

方法1 (繫結bind/解除unbind點選): <a href="javascript:void(0)" id="dianji">點選</a> <br/><

ajax 防止重複提交資料

 防止資料重複提交 在實際專案開發中,提交表單時常常由於網路或者其原因,使用者點選提交按鈕誤認為自己沒有操作成功,進而會重複提交按鈕操作次數,如果頁面前端程式碼沒有做一些相應的處理,通常會導致多條同樣

jquery ajax重複提交

jQuery是經常使用的一個開源js框架,其中的$.ajax請求中有一個beforeSend方法,用於在向伺服器傳送請求前執行一些動作。 具體可參考jQuery官方文件:http://api.jquery.com/Ajax_Events/ $.ajax({ beforeSend: function

ajax非同步請求防止重複提交方法

  JS通過ajax發起非同步請求時,經常會出現一個按鈕快速多次點選時,請求進行了多次提交,可能導致很多不必要的問題出現,比如寫入某些髒資料等。   此處針對ajax發起請求多次提交的問題進行JS程式碼處理的簡單方法有如下兩種: 1、定義lock(鎖)機制: //提交 v

jQuery實現載入中效果,防止重複提交

//匯出表格載入中的提示var dian=0;//控制'●'的個數var t=null;//停止時使用function id_loadspot(loadspotSpan,loadingDiv,exportLink){   loadingDiv.css('visibility','visible');//顯示

form表單防止重複提交方法

會引起表單重複提交的情況:f5重新整理頁面, 點選瀏覽器後退,重複點選提交按鈕前臺:1. 提交後按鈕置灰,或者新增蒙板2. PRG模式,表單提交後,redirect到一個倒計時頁面,或者資訊提示頁面,等有成功資訊返回後,再跳轉回之前頁面。3. js中設定標記為判斷後臺:1 s

spring mvc 防止重複提交表單的兩種方法,推薦第二種

第一種方法:判斷session中儲存的token 比較麻煩,每次在提交表單時都必須傳入上次的token。而且當一個頁面使用ajax時,多個表單提交就會有問題。 註解Token程式碼: package com.thinkgem.jeesite.common.re

PHP防止表單重複提交方法

下面的情況就會導致表單重複提交:       點選提交按鈕兩次。       點選重新整理按鈕。       使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。       使用瀏覽器歷史記錄重複提交表單。       瀏覽器重複的HTTP請求。      

表單防止頁面重複提交方法

使用者在操作表單資料時往往會出現表單資料重複提交的問題,尤其實在Web開發中此類問題比較常見。重新整理頁面,後退操作以前的頁面,單機多次按鈕都會導致資料重複提交。此類問題是因為瀏覽器重複提交HTTP請求導致。    下面簡單介紹以防止表單資料重複提交的四種解決方案。 一、在

jQueryAJAX get() 和 post() 方法

文件 緩存 set log 實例 請求 返回 nstat 獲取數據 jQuery get() 和 post() 方法用於通過 HTTP GET 或 POST 請求從服務器請求數據。 HTTP 請求:GET vs. POST 兩種在客戶端和服務器端進行請求-響應的常用方法是

springMvc 攔截器 防止重複提交

1.DispatcherServlet     SpringMVC具有統一的入口DispatcherServlet,所有的請求都通過DispatcherServlet。     DispatcherServlet是前置控

Http協議與表單防止重複提交實戰解決方案

http長連線與短連線 HTTP協議與TCP/IP協議的關係 HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠的傳遞資料包

jQuery ajax一直呼叫error方法,問題解決

首先說原因,然後再說具體情況: 原因一:返回的json格式不對。 原因二:在返回資料之前不能有任何的輸出,包括開啟除錯。例如:後端用的是php,像在返回json資料之前,echo,var_dump等輸出是不能有的,debug也要關閉。 * 問題描述 實現功能:點贊功能 問題

自定義註解 防止重複提交

定義註解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.a

防止重複提交表單-思路

防止重複提交表單 $c =md5(serialize($this->request->request())); $find = session($c); if($find){ if($find['expire']+2-time()>=0){ re

防止重複提交

package web1; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.security.MessageDigest; i

vue+element-自定義指令,防止重複提交

全域性directive的寫法 // 提交以後禁用按鈕一段時間,防止重複提交 import Vue from 'vue'; Vue.directive('noMoreClick', { inserted(el, binding) { el.addEventListener('clic

mvc提供的ajax表單提交方法

Ajax.Beginform()的五個引數 一、actionName 用於指定請求地址的Action名稱。 二、controllerName 用於指定請求地址的Controller名稱。 三、routeValues 用來傳遞引數,支援兩種資料型別(兩種傳參方式):