C # POST запускает метод несколько раз, но должен запускаться только один раз - PullRequest
0 голосов
/ 03 октября 2019

У меня простой вид. Пользователь заполняет форму на предыдущей странице и затем отправляет форму Ajax. Форма подтверждает, что все, включая оплату, хорошо. Если это не так, он остается на той же странице с ошибкой (отсюда и AJAX), но если это хорошо, то он перенаправляет на страницу подтверждения через:

var url = '@Url.Action("PYGConfirmationPost", "PYG")';

, которая загружает вид, который выглядиткак на картинке ниже. Раскрывающийся список содержит все электронные письма, которые были добавлены на предыдущем экране. Так что все очень просто. На странице есть только 3 вещи из jQuery / JavaScript. Одним из них является Google Analytics. два других находятся под изображением.

Confirmation Page

//Prevents user from going back to the form. Used and works on many Views.
history.pushState("", "", "../Home/Index")

//auto submit in 30 seconds
$(document).ready(function () {

    setTimeout(function () {
        $("#PreSubmit").trigger('click');
    }, 30000);
});

//After 30 seconds, submit GA and then submit the form.
$('#PreSubmit').click(function () {
    //Submit google analytics here
    $("#submit").trigger('click');
});

Вот метод, который он вызывает. Я ставлю точку останова вверху и возвращаю RedirectToAction. По какой-то причине, как только он попадет в скобку (}) прямо под возвращаемым перенаправлением ... он вернется наверх и начнет метод заново. РЕДАКТИРОВАТЬ: Я удалил все, кроме возврата RedirectToAction, и он все еще делает цикл.

    [RequireAuth]
    [HttpPost]
    public ActionResult PYGConfirmationPost(PYG SignUp)
    {
      //EDIT: The code in the controller isn't the issue. I deleted everything except for the return statement and it still does the strange loop.

        return RedirectToAction("Index", "Home");
    }

Он последовательно будет запускать метод 2x, но если я пройдусь по нему, он сделает это где-нибудь с 2-6x. Я обычно сдаюсь после 6х, так что это может сделать больше. Один раз он делал метод только один раз.

Я пытался переместить RedirectToAction в OperationKillTheCookies (), но это не помогло. Я попытался изменить RedirectToAction на View, но это не помогло.

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

Редактировать Я создал тест с использованием веб-драйвера selenium (в частности, драйвера Chrome). Он не зацикливает метод при запуске метода тестирования.

Edit 2 Он не делает это со всех компьютеров. Еще 2 человека попробовали это, и это сработало как хотелось пару раз каждый. Однако, 2 других человека попробовали это, и это срабатывало слишком много раз. Я понятия не имею, в чем может быть проблема.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

возможно добавьте

    return false;

к $ ('# PreSubmit'). Click ():

     $('#PreSubmit').click(function (e) {
    e.preventDefault();
            $("#submit").click();
    return false;
        });

и почему бы не разделить вызов GA как его собственную функцию?

    function callga()
   {
    ga(......);
    }
0 голосов
/ 04 октября 2019

Спасибо Джруду за то, что он вдохновил меня найти «решение». Я понятия не имею, что с этим не так, но я нашел решение. Я изменил триггер (щелчок), чтобы просто щелкнуть (). не исправить это. Поместите его в $ (документ) .ready (). Результат тот же.

Однако, если я добавлю материал Google Analytics в функцию за пределами клика, то это сработает. Код GA ничего не делает, кроме отправки в Google Analytics, согласно документации GA. Так что никто не знает, какова была точная причина.

Странно то, что не похоже, что он дважды стреляет со стороны клиента. Похоже, что он зацикливает метод в контроллере, который не должен иметь ничего общего с jQuery или GA. Так что, в основном, ведьмы были причиной проблемы.

$(document).ready(function () {
    eCommerce();


    setTimeout(function () {
        $("#PreSubmit").click();
    }, 30000);

    //send eCommerce and then submit the form because I have zero idea how to use Google Analytics and this feels right.
    $('#PreSubmit').click(function () {
        $("#submit").click();
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...