Как нажать кнопку после успешного Ajax?

1

Когда вызов Ajax успешный, пользователь перенаправляется на главную страницу:

$('#button_1').on('click', function () {
                //code
                $.ajax({
                    method: "POST",
                    url: "/somewhere",
                    data: {
                        //code
                    }
                }).done(function () {
                        location.href = "/";
                });    
            });

После перенаправления я хочу автоматически нажать другую кнопку, которая откроет модальный. Я пробовал внутри done различные методы:

.done(function () {
    location.href = "/";
    $('#button_2').click(); // doesn't work 
 }); 

.done(function () {
    location.href = "/";
    setTimeout(function ()
        $('#button_2').click(); // doesn't execute  
    }, 2000);
 });

.done(function () {
    location.href = "/";
    $(document).ready( function () {
        // executes but user is immediately redirected to main page
        $('#button_2').click(); 
    });
 }); 

Я также попытался за пределами Ajax, в функции, в которой находится вызов Ajax, но имел те же результаты.

Как я могу нажать кнопку программно после вызова Ajax?

  • 0
    попробуйте success: атрибут в ajax
  • 0
    такое $('#button_2') на странице / ?
Показать ещё 6 комментариев
Теги:
settimeout

5 ответов

1
Лучший ответ

Спасибо за ответ. Я исследовал немного больше и нашел другой способ сделать это:

$('#button_1').on('click', function () {
                sessionStorage.setItem("reload", "true");
                //code
                $.ajax({
                    method: "POST",
                    url: "/somewhere",
                    data: {
                        //code
                    }
                }).done(function () {
                        location.reload();
                });    
            });

И на главной странице:

$(document).ready(function () {
        var reload = sessionStorage.getItem("reload");
        if (reload == "true") {
            $("#button_2").click();
            sessionStorage.setItem("reload", false);
        }
    });
5

Вам нужно добавить эту логику на целевую (главную) страницу.

После перенаправления текущая страница больше не активна, и вся логика удаляется.

Вы можете добавить некоторый параметр в URL-адрес, чтобы знать, когда вы там, из-за перенаправления, что-то вроде:

location.href="/?redirect=1"

и затем проверьте этот параметр

  • 0
    То, как я поступил, было проще, но +1 за ваше предложение
2

Строки кода рядом с

location.href = "/";

не будет выполнен, потому что браузер переходит на другую страницу.

Поэтому вы должны поместить свою логику в / page (#button_2 должна быть на этой странице).

2

В настоящее время вы пытаетесь выполнить код после перенаправления, что невозможно сразу, потому что код после location.href= "/" никогда не будет достигнут. После перенаправления у вас есть новая страница с ясным состоянием.

Ваша текущая функция все еще может выглядеть так:

$('#button_1').on('click', function () {
    $.ajax({
        method: "POST",
        url: "/somewhere",
        data: {
            //code
        }
    }).done(function () {
            location.href = "/?modal-open=1";
    });    
});

Как вы можете видеть, я добавил параметр запроса в перенаправление, чтобы мы знали, что мы перенаправлены с намерением открыть модальный.

Для вашей корневой страницы (/) вам понадобится такой скрипт:

$(document).ready( function () {
    // check the URL for the modal-open parameter we've just added.
    if(location.search.indexOf('modal-open=1')>=0) {
        $('#button_2').click(); 
    }
});

Это проверит, находится ли этот параметр в URL-адресе и запускается щелчок.

  • 0
    Спасибо, +1 за хороший ответ. Я решил это, используя свой ответ, так как это было легче обрабатывать
1

Прежде всего, когда вы перенаправляете новую страницу, вы не можете получить доступ к DOM, потому что страница перезагружается. Вы можете отправить параметр для этого.

$(document).ready( function () {

    //after page load

    var isButtonActive = findGetParameter("isButtonActive");
    if(isButtonActive){
        alert("button_2 activated");
        $('#button_2').click(); 
    }

    $('#button_1').on('click', function () {
        //code
        $.ajax({
            method: "POST",
            url: "/somewhere",
            data: {
                //code
            }
        }).done(function () {
            alert("page will be reload. button_2 wil be activated");
            location.href = "/?isButtonActive=true";
        });    
    });

    $('#button_2').on('click', function () {
        alert("button_2 clicked");
    });

});

function findGetParameter(parameterName) {
    var result = null,
        tmp = [];
    location.search
        .substr(1)
        .split("&")
        .forEach(function (item) {
          tmp = item.split("=");
          if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
        });
    return result;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню