Запрос выполняется дважды

97
31 октября 2021, 07:20

Есть такой кода в success ajax:

var timer = setInterval("check()", 1000);
function check() {
            var sid = "<?= $getSID ?>";
            var uid = "<?= $getUID ?>";
            var id = "<?= $getID ?>";
            var info = "checker";
        $.ajax({
                type: 'POST',
                cache: false,
                dataType: 'json',
                url: 'check_status_trade',
                data: {
                  "id":id,
                  "sid":sid,
                  "uid":uid,
                  "info":info
                },
                success: function(data) {
                if (data.pokypatel == '1' && data.prodavec == '1')
                {
                    clearInterval(timer);

                    $(document).bind("keydown", disableF5);
                    $(document).on("keydown", disableF5);
                   $('#i').trigger('click');
                  succefullSwap(); // <------ВНИМАНИЕ СЮДА
                   setTimeout(function(){
                      window.location = "/";
                    }, 5000);
                }
    },
        error: function(data) { // Данные не отправлены
        }
    });
}

Функция succefullSwap тоже содержит ajax запрос. Вот он:

function succefullSwap() {
            var sid = "<?= $getSID ?>";
            var uid = "<?= $getUID ?>";
            var id = "<?= $getID ?>";
            var type = "<?= $getTYPE ?>";
        $.ajax({
                type: 'POST',
                cache: false,
                dataType: 'json',
                url: 'check_status_trade',
                data: {
                  "id":id,
                  "sid":sid,
                  "uid":uid,
                  "type":type,
                  "success":"success"
                },
                success: function(data) {

    },
        error: function(data) { 
        }
    });
}

И все идет хорошо, все отправляется и исполняется, но когда данные приходят в check_status_trade, то результаты, почему то, удваиваются..вот код из check_status_trade:

if ($_POST['success'] == 'success')
{
        $id = $_POST['id'];
        $sid = $_POST['sid'];
        $uid = $_POST['uid'];
        $type = $_POST['type'];
        $bds = new mysqli("localhost","имя","пас","база");  
        $bds->query("UPDATE check_trade SET status_trade=1 WHERE check_id='$id'");       

           if ($type == 'item')
            {
                //Получаем цену за лот с комиссией 
              $query = $bds->query("SELECT cost FROM item_list WHERE unique_id='$id' AND user_sender_id='$sid' AND type='item'");     
              $helper = mysqli_fetch_array($query);    
              $getCostForLot = $helper[0];

              $bds->query("UPDATE users SET balance=balance-'$getCostForLot' WHERE vk_id='$uid'");

    }

В результате, вместо положенного вычитания 1 раз, он вычитает дважды и пишет это значение в бд. Вроде ajax останавливаю перед вызовом другой ajax функции..или не в этом причина ?

Answer 1

Я не знаю, где находится первый фрагмент кода, который Вы привели, но если остальной код такой же как

        $(document).bind("keydown", disableF5);
        $(document).on("keydown", disableF5);

(эти две строчки делают одно и то же, то есть добавляют один и тот же обработчик дважды), то не приходится удивляться, что какие-то действия выполняются два раза.

    var timer = setInterval("check()", 1000);
    function check() {
        clearInterval(timer); // !!!
        var sid = "<?= $getSID ?>";
        var uid = "<?= $getUID ?>";
        var id = "<?= $getID ?>";
        var info = "checker";
        $.ajax({
            type: 'POST',
            cache: false,
            dataType: 'json',
            url: 'check_status_trade',
            data: {
              "id":id,
              "sid":sid,
              "uid":uid,
              "info":info
            },
            success: function(data) {
            if (data.pokypatel == '1' && data.prodavec == '1')
            {
                // clearInterval(timer);
                ...
READ ALSO
Как автоматически подставить данные и сделать авторизацию?

Как автоматически подставить данные и сделать авторизацию?

Доброго времени суток всемСтолкнулся вот с такой проблемой

134
Не работает плагин ACF на странице

Не работает плагин ACF на странице

Подключил плагин ACF, и создал свою новую страницу sendphp, при переходе по ссылке на страницу в разделе Страницы всё корректно добавляется, но по ссылке...

143
Ловит значение start в телеграм боте

Ловит значение start в телеграм боте

Ребят помогите словить значение ссылки http://tme/mybot?start=123

243
Вывод сайдбара wordpress на все страницы

Вывод сайдбара wordpress на все страницы

как можно вывести сайдбары на все страницы в wordpress? Шаблон данную функцию нативно не поддерживает

134