Ajax Двойное срабатывание функции успешного вызова - PullRequest
1 голос
/ 18 июня 2020

У меня есть вызов ajax, который запускается после события ввода onkeyup. После ввода 8 номеров он выполняет вызов.

Если вызов был успешным, он добавляет новую строку в таблицу.

Проблема в том, что он добавляет 2 строки. Звонок ajax, если стреляют дважды. Если у меня запущен отладчик, он добавляет только 1 строку. Если есть предупреждение о добавлении строки, добавляется только 1 строка. Если у меня нет отладчика или предупреждения, добавляется 2. Не уверен, почему.

Ввод:

<input style="width:100px" type="text" id="account0" maxlength="8" onkeyup="getAccount(this);" />

Функция addrow запускается дважды (если я не отлаживаю или не добавляю всплывающее окно). Функция addrow не содержит циклов, просто добавляет строку в таблицу HTML. Переменная i остается одинаковой для обоих вызовов, она не увеличивается:

function getAccount(val) {
        var account = val.value;
        if (account.length == 8) {
            var i = parseInt(val.id.replace("account", ""));
            $.ajax({
                type: "GET",
                url: "/123/AccountSelect?account=" + account,
                dataType: 'json',
                ContentType: "application/json, charset=UTF-8",
                success: function (data) {
                        //create new row for next account if needed
                        addRow(i + 1, data);
                },
                error: function (xhr, status, error) {
                    showModal(xhr.status + ": " + xhr.statusText);
                }
            });
        }
    }

Опять же, это происходит только в том случае, если не работает отладчик (конечно) или нет всплывающего окна, прерывающего поток.

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Попробуйте использовать async: false как следующее:

function getAccount(val) {
    var account = val.value;
    if (account.length == 8) {
        var i = parseInt(val.id.replace("account", ""));
        $.ajax({
            type: "GET",
            url: "/123/AccountSelect?account=" + account,
            async: false,
            dataType: 'json',
            ContentType: "application/json, charset=UTF-8",
            success: function (data) {
                    //create new row for next account if needed
                    addRow(i + 1, data);
            },
            error: function (xhr, status, error) {
                showModal(xhr.status + ": " + xhr.statusText);
            }
        });
    }
}
0 голосов
/ 18 июня 2020

Вот что сработало. Я использовал логическое значение, чтобы разрешить добавление строки только один раз, а затем использовал событие onmouseup вновь созданного ввода в новой строке, чтобы сбросить логическое значение, чтобы разрешить добавление других строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...