Ajax Timed Refresh / PHP / MySQL - PullRequest
2 голосов
/ 24 июля 2011

Кажется, по моему вопросу есть несколько очень хороших ресурсов - по крайней мере, основ.Но для меня все еще есть несколько темных областей.

Первое - что я пытаюсь сделать.

Я заставляю пользователей "ждать" на промежуточной странице, пока я проверяю, не видят ли ониотправил правильную информацию с другого ресурса (например, SMS или электронная почта), чтобы подтвердить свою подписку на мой сервис.Страница должна асинхронно проверять каждую пару секунд, чтобы увидеть, выполнили ли они необходимые шаги, и их статус был установлен на «1» или «активный» в базе данных.

Завершение запроса ajax кажется довольно простым -Тем не менее, я немного разбираюсь во времени.

Кроме того, что я пытаюсь сделать с информацией, которую я получаю - отлично, поэтому пользователь был установлен как «активный», и я могуполучить это значение - но что тогда использовать, чтобы перенаправить их на последнюю страницу или страницу с благодарностью?Является ли это переменная javascript, которая должна содержать значение, а затем перенаправить?

Извините, если это кажется немного беспорядочным, но это моя первая попытка в Ajax и приуроченные обновления / ответы.

Ответы [ 4 ]

4 голосов
/ 24 июля 2011

Я бы сделал предопределенное количество интервалов для вызова ajax - после 3 попыток произойдет сбой с сообщением:

var attempts = 0;
var validation_attempt = setInterval(function(){
    if(attempts > 3)
    {
        clearInterval(validation_attempt);
        $('#my_div').html('No activity, try again later');
        return false;
    }

    $.ajax({
        url: '/my_file.php',
        /* other params */
        success:function(data){
            if(data == 'ok')
            {
                clearInterval(validation_attempt);
                $('#my_div').html('Your account has been approved');
            }
            else
            {
                attempts++;
            }
        }
    });
},3000); // 3 seconds

Это, по сути, должно позволить пользователю подождать самое большее 9 секунд, прежде чем увидетьсообщение «Нет активности, попробуйте позже».

1 голос
/ 24 июля 2011

Ваша «ожидающая» страница может опрашивать с помощью ajax для завершения. Первоначально он может опрашивать каждые 15-20 секунд, через некоторое время возвращаться назад раз в минуту, а затем через некоторое время прекратить опрашивать все вместе. Во всех случаях убедитесь, что вы не будете продолжать опрос навсегда, так как это будет плохо для вашего бэкэнда, если пользователь никогда не завершит процесс подписки.

Если ajax-опрос получит успешный ответ, я думаю, вы бы перенаправили пользователя в одно из двух мест:

1) Страница, которая просто указывает «Успех - вы подписаны» и сообщает им, что делать дальше.

или

2) Открытие веб-страницы для фактического использования сервиса. Это может быть страница входа или, возможно, вы уже можете войти в систему автоматически, чтобы переместить их на открытую страницу для службы.

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

0 голосов
/ 25 июля 2011

Вы можете попробовать использовать push-версию сервера (комету) вместо ajax для этого решения.

0 голосов
/ 24 июля 2011

Я кодировал это в ответ на ваш вопрос.Я думаю, что я отправлю это в случае, если это полезно:

var active = false, i, t;

// check 'active' for truthyness, if so kill timers
function checkActive() {
    if(active) {
        clearInterval(i);
        clearTimeout(t);
        window.location.href = "success.html";
    }
    return false;
}

// recursively call URL to check 'active' status
function checkStatus() {
    $.post("checkStatus.php", { some: "variable" }, function(resp) {
         if(resp !== "1") {
             t = setTimeout(checkStatus, 2000);
         } else {
             active = true;
         }
    });
}

$(document).ready(function() {
    checkStatus();
    i = setInterval(checkActive, 2000);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...