新しいプロジェクトでは、axios によって重複した送信を防ぐことができますが、古いプロジェクト (jQuery など) には axios がありません。しかし、Ajaxフックをインポートすると Ajax フックのソースコード アドレス: https://github.com/wendux/Ajax-hook 輸入 <script src="https://unpkg.com/[email protected]/dist/ajaxhook.min.js"></script> ah オブジェクトは ajaxhook.min.js をインポートした後に表示されます。以下を使用します。 ah.proxy({ //リクエストが開始される前にonRequestを入力します: (config, handler) => { コンソールログ(config.url) ハンドラの next(config); }, //タイムアウトなどのリクエストエラーが発生したときに入力します。404 などの http ステータスコードエラーは含まれません。これらのエラーはリクエストが成功したとみなされます。onError: (err, handler) => { コンソールログ(エラータイプ) ハンドラ.next(エラー) }, //リクエストが成功したら、onResponse: (response, handler) => {を入力します。 コンソール.log(レスポンス.レスポンス) ハンドラ.next(レスポンス) } }) このうち、config.method は ajax リクエストメソッド (GET/POST) であり、config.url はリクエストされたパスです。 onError の err オブジェクトと onResponse の応答は、err.config.method/response.config.method を通じて ajax リクエスト メソッドを取得できます。 重複送信を防ぐため、少しカプセル化して js ファイルを実装しました。テスト済みで効果的です。後で友人がテストできます。専門家の皆さんは、議論したり、欠陥を指摘したりすることを歓迎します。 ```javascript 関数 loadJS(url, コールバック) { var スクリプト = document.createElement('script'); fn = コールバック || 関数() {}; スクリプトタイプ = 'text/javascript'; スクリプトを遅延させる //IE スクリプトの準備が完了している場合 script.onreadystatechange = 関数() { script.readyState == 'loaded' || script.readyState == 'complete' の場合 { スクリプトのonreadystatechange = null; 関数fn(); } } } それ以外 { // その他のブラウザ script.onload = function() { 関数fn(); } } スクリプトのURLをコピーします。 document.getElementsByTagName('body')[0].appendChild(スクリプト); } laodJS('https://unpkg.com/[email protected]/dist/ajaxhook.min.js', 関数() { ajaxArr = [] とします ah.proxy({ //リクエストが開始される前にonRequestを入力します: (config, handler) => { var id = config.method + config.url (ajaxArr.indexOf(id) === -1)の場合{ // 各リクエストに一意の ID を設定し、ajaxArr にプッシュします。リクエストが完了したら、アイテム ajaxArr.push(id) を削除します。 ハンドラの next(config); } それ以外 { ハンドラ.reject() を返す } }, //タイムアウトなどのリクエストエラーが発生したときに入力します。404 などの http ステータスコードエラーは含まれません。これらのエラーはリクエストが成功したとみなされます。onError: (err, handler) => { var id = err.config.method + err.config.url (ajaxArr.indexOf(id) !== -1) の場合 { ajaxArr.splice(ajaxArr.indexOf(id), 1) } ハンドラ.next(エラー) }, //リクエストが成功したら、onResponse: (response, handler) => {を入力します。 var id = response.config.method + response.config.url (ajaxArr.indexOf(id) !== -1) の場合 { ajaxArr.splice(ajaxArr.indexOf(id), 1) } ハンドラ.next(レスポンス) } }) }) このファイルをグローバルにインポートするだけです。このファイルに preventRepeatSubmission.js という名前を付けました。 私の HTML コード: <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <title>ドキュメント</title> </head> <本文> <h1>これはインデックスページです</h1> <ul> <li><a href="/">/</a></li> <li><a href="/index">インデックスページ</a></li> <li><a href="/404">404 ページ</a></li> <li><a href="/info">情報ページ</a></li> <li><a href="/nofound">見つかりません</a></li> </ul> <button id="sendMsg">リクエストインターセプター</button> <script src="./jquery.min.js"></script> <!-- <script src="https://unpkg.com/[email protected]/dist/ajaxhook.min.js"></script> --> <script src="./preventRepeatSubmission.js"></script> <スクリプト> document.getElementById("sendMsg").addEventListener("クリック", function() { $.ajax({ URL: 'http://localhost:3000/home', タイプ: 'GET'、 成功: 関数(データ) { console.log('成功', データ) } }) }) </スクリプト> </本文> </html> 私のサーバーは koa2 を使用して構築されており、コードは次のとおりです。 const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); 定数ルーター = 新しいルーター(); ルーター .get('/', (ctx, next) => { ctx.body = '<h1>こんにちは jspang</h1>'; }) .get('/home', async (ctx, next) => { // ctx.body = '<h1>これはホームページです</h1>' 非同期関数delay(time) { 新しいPromise(function(resolve,reject)を返す{ setTimeout(関数(){ 解決する(); }、 時間); }); }; 遅延を待機します(5000); 定数 url = ctx.url; // リクエスト内のリクエストパラメータを取得します。const request = ctx.request; リクエストクエリを定数で指定します。 リクエストクエリ文字列を定数で指定します。 // ctx 内の get リクエストのパラメータを取得します。const ctx_query = ctx.query; 定数 ctx_querystring = ctx.querystring; ctx.body = {url、リクエストクエリ、リクエストクエリ文字列、ctx_query、ctx_query文字列}; ctx.response.body = {status:200, msg:'パラメータが正常に取得されました'}; }) アプリ .use(router.routes()) // ルートを app.use(router.allowedMethods()) に読み込みます // ミドルウェアを読み込みますapp.listen(3000, () => { console.log('[デモ]はポート3000で実行されています'); }); ブラウザテスト結果: 画像のボタンを押すと、Ajax リクエストが開始されます。私のサーバーは応答を 5 秒遅延しました。5 秒の遅延中にボタンを 20 回クリックしましたが、同じ 20 回の Ajax リクエストが正常にインターセプトされ、うまく機能しました。 要約する jQuery プロジェクトで重複送信を防ぐ方法についての記事はこれで終わりです。jQuery の重複送信防止に関する関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
1 はじめにApache Storm は、Hadoop と同様に、大量のデータを処理するために使用で...
目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...
<br />外交部などの中央政府機関、各レベルの地方政府、その他の国家機関や部門が率先し...
この記事ではvueを使用し、マウスクリックイベントといくつかの小さなページの最適化を追加します。 基...
1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...
1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...
Docker の設計では、コンテナは 1 つのアプリケーションのみを実行します。しかし、現在のアプリ...
centos-DVD1バージョンシステムの固定IPアドレスは192.168.159.128で、cen...
参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...
<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...
ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....
開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...
導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...
目次まとめ基本的な例モチベーションデザインの詳細コンパイルの詳細採用戦略練習するヒント適切なプロパテ...
現在、MySQL を学習中です。私は完全な初心者で、Linux についてはあまり知りません。今後の作...