Защита от дублирующих AJAX-запросов

4534
4 Августа 2023

Веб-приложения, основанные на AJAX, позволяют пользователям взаимодействовать с сервером без перезагрузки страницы. Однако иногда возникает проблема дублирующих AJAX-запросов, когда пользователь посылает несколько одинаковых запросов одновременно или в короткий промежуток времени. Это может привести к нежелательным последствиям, таким как множественная обработка запросов на сервере и некорректные результаты. В этой статье мы рассмотрим простой способ защиты от дублирующих AJAX-запросов с использованием JavaScript и jQuery.

Для защиты от дублирующих AJAX-запросов мы можем использовать переменную loaded, которая будет отслеживать, был ли уже выполнен AJAX-запрос. Давайте рассмотрим следующий код:

jQuery

var loaded = false;
$.ajax({
    url: '/uri/action',
    type: 'POST', 
    dataType: 'json',
    beforeSend: function () {
        if (loaded) {
            return false;
        } else {
            loaded = true;
        }
    },
    success: function (results) {
        // Обработка успешного ответа
    },
    error: function () {
        // Обработка ошибки
    },
    complete: function () {
        loaded = false;
    }
});

Java script

let loaded = false;

fetch('/uri/action', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
})
    .then(response => {
        if (loaded) {
            return false;
        } else {

            loaded = true;
        }
    })
    .then(result => {
        // Обработка успешного ответа
    })
    .catch(error => {
        // Обработка ошибки
    })
    .finally(() => {
        loaded = false;
    });

В этом коде мы объявляем переменную loaded, которая изначально устанавливается в false. При отправке AJAX-запроса мы проверяем значение loaded. Если оно равно true, то мы возвращаем false из функции beforeSend, что отменяет отправку запроса. Если же loaded равно false, мы устанавливаем его значение в true, чтобы предотвратить отправку дублирующих запросов. По завершении запроса мы снова устанавливаем loaded в false, чтобы разрешить отправку новых запросов.


  1. Объявляем переменную loaded, которая будет отслеживать состояние запроса.
  2. Отправляем AJAX-запрос с использованием $.ajax().
  3. В функции beforeSend мы проверяем, был ли уже выполнен запрос. Если да, возвращаем false, чтобы отменить отправку запроса.
  4. Если запрос еще не был выполнен, мы устанавливаем loaded в true, чтобы предотвратить отправку дублирующих запросов.
  5. В функции success и error вы можете добавить соответствующую обработку успешного ответа или ошибки.
  6. В функции complete мы сбрасываем loaded в false для разрешения отправки новых запросов.

Использование переменной loaded и проверки состояния запроса в функции beforeSend позволяет нам защититься от дублирующих AJAX-запросов в нашем веб-приложении. Это простой и эффективный способ предотвратить нежелательные последствия, связанные с повторной отправкой одинаковых запросов. Убедитесь, что вы добавляете соответствующую обработку успешного ответа и ошибок, чтобы ваше веб-приложение работало корректно и надежно.

поделиться в:
ruenkzzh