Вопрос периодических ajax запросах

Вопросы по вёрстке и JavaScript
Ответить
desol
Сообщения: 1
Зарегистрирован: 2018.11.20, 00:21

Вопрос периодических ajax запросах

Сообщение desol »

Здравствуйте! У меня такая проблема: есть форма, и есть две ajax функции, одна функция отправляет форму и перед отправкой, через tid = setInterval(progress, 100) запускает вторую функцию. В первой в success стоит clearInterval(tid), но он не срабатывает, так так как при вызове setInterval записывается один индекс в tid, а при clearInterval значение tid уже другое. Никак не могу понять почему значения tid не совпадают. Надеюсь на вашу помощь.
Собственно сам скрипт:

Код: Выделить всё

var tid;

    progress = function(){
        $.ajax({
            url: '/upload_progress.php',
            dataType: 'json',
            success: function(data){
                if(data.percent) {
                    $('.progress-bar').width(
                        Math.ceil(data.percent)+'%';
                    );
                    $('.progress-bar').text(Math.ceil(data.percent)+'%'); 

                    $('.formbody').hide();
                    $('.progress').show();
                }
            }
        });
    };

    $(document).ready(function () {
        $('form').ajaxForm({
            type: 'POST',
            success: function () {
                    clearInterval(tid);
                $('.formbody').hide();
                $('.progress').hide();
                $('.result').show();
            },
            beforeSubmit: function () {
                tid = setInterval(progress, 100);
            }
        });
    });
Файл upload_progress.php

Код: Выделить всё

<?php
session_start();
$percent = 0;
$data = array();

if(isset($_SESSION['upload_progress_test']) and is_array($_SESSION['upload_progress_test'])) {
    $percent = ($_SESSION['upload_progress_test']['bytes_processed'] * 100 ) / $_SESSION['upload_progress_test']['content_length'];
    $percent = round($percent,2);
    $data = array(
        'percent' => $percent,
        'content_length' => $_SESSION['upload_progress_test']['content_length'],
        'bytes_processed' => $_SESSION['upload_progress_test']['bytes_processed']
    );
}
echo json_encode($data);
?>
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Вопрос периодических ajax запросах

Сообщение skynin »

Код: Выделить всё

var tid;
            success: function () {
                    clearInterval(tid);
                    tid = undefined;
            },
            beforeSubmit: function () {
            if (tid == undefined)
                tid = setInterval(progress, 100);
            }
        });
    });
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить