Отправка формы перед полями, заполненными значениями json - PullRequest
0 голосов
/ 20 октября 2011

Я использую JSONP для извлечения значений для формы входа в систему, затем получаю форму для самостоятельной отправки. Однако форма передается до заполнения полей, что приводит к появлению флагов проверки.

Функция возвращает правильное значение, но глобальная переменная unscrambleText возвращает неопределенное значение. Я знаю, что async: false необходим для возврата синхронных вызовов, но в данном случае это игнорируется. Я получил это для работы с базовым вызовом AJAX на другой странице. Чего мне не хватает в этом конкретном примере?

$(document).ready(function () {
            if ((getQueryVariable("a") != 0) && (getQueryVariable("b") != 0)) {
                $("#UsernameTextBox").val(decryptEm(getQueryVariable("a")));
                $("#PasswordTextBox").val(decryptEm(getQueryVariable("b"));
                //This action is being triggered before the above two fields are populated
                $("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click");
            }

            function getQueryVariable(variable) {
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i = 0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    if (pair[0] == variable) {
                        return unescape(pair[1]);
                    }
                }
                return 0;
            }

            function decryptEm(thevar) {
                var unscrambleText;

                $.ajax({
                    url: 'http://foo.bar/decrypt.php',
                    async: false,
                    dataType: 'jsonp',
                    data: 'text=' + thevar,
                    success: function (data) {
                        unscrambleText = data["theval"].replace(/^\s+|\s+$/g, "");
                    }
                });
                return unscrambleText;
            }

        });

Ответы [ 3 ]

0 голосов
/ 20 октября 2011

Возвращается undefined, поскольку при возврате функции не имеет значения. Существует задержка между тем, когда decryptEm и сервер отвечает на ваш запрос. Эта задержка может быть любой, потому что она зависит от времени отклика сервера.

0 голосов
/ 20 октября 2011

Поместите это в функцию, например:

function loadValues(){
    $("#UsernameTextBox").val(decryptEm(getQueryVariable("a")));
    $("#PasswordTextBox").val(decryptEm(getQueryVariable("b"));
    return true;
}
if(loadValues==true){
    $("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click");
}

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

0 голосов
/ 20 октября 2011

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

поочередно изменяя ваш код на decryptEms, который будет заполнять все поля и возвращать оба, и только после этого вы отправляете форму запуска

...