Подтвердить что ты не робот

Автозаполнение браузера/сохраненная форма не работают в ajax-запросе

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

Большинство поисковых запросов разработчика о пользовательском автозаполнении для получения результата из db ajax или о том, как отключить автозаполнение браузера из-за соображений безопасности или они хотят использовать другой расширитель автозаполнения.

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

Это простое и нормальное заполнение формы, например, имени пользователя и пароля в форме входа. После отправки формы (сообщение данных формы) браузер сохранит автозаполнение или событие в FF попросит сохранить вместе с паролем.

Теперь подумайте о логине, представленном через ajax. Данные формы не сохраняются автоматически IE или FF просто потому, что форма не отправляется почтовым методом. Я уверен, что это из-за метода ajax vs post.

CMS, такой как DotNetNuke, используя этот способ, и мне очень сложно набрать имя пользователя и пароль для 5 пользовательских логинов для целей разработки, событие, которое я хочу позволить пользователю сохранить свои собственные данные формы в браузере без каких-либо пользовательских или расширителей. В другом примере пользователь может видеть и использовать тот же адрес электронной почты, чтобы заполнить любую форму электронной почты через веб-сайт или домен.

Как обходиться с этим? У вас есть предложение, какие ключевые слова более подходят для поиска?

CallMeLaNN

4b9b3361

Ответ 1

У меня такая же проблема. Я смог решить эту проблему для FireFox, добавив скрытый iframe, который я отправляю через JavaScript, прежде чем делать свой пост AJAX. Я все еще не нашел ничего, что работает в Chrome/IE.

Ответ 2

Я столкнулся с той же проблемой и немного искал. Я думаю, что решение ниже - самый удобный способ решить эту проблему, если у вас есть страница входа в систему. Если мы рассмотрим логин, отправленный через ajax, ни один из браузеров не запомнит или не предложит функцию автокоманды для поля имени пользователя и пароля, дополнительно попросите запомнить учетные данные. Но если вы используете функцию отправки javascript (возможно, она несовместима со старыми версиями браузеров), все браузеры предлагают сохранить имя пользователя и пароль, кроме IE. Но я нашел еще один javascript для IE, чтобы он предлагал сохранить имя пользователя и пароль.

На моей странице входа я обработал имя пользователя и пароль и отправил их на серверный сервер с помощью ajax-запроса, и если логин выполнен успешно, я отправил форму по методу, указанному ниже. Было показано окно пользователя для предупреждения что логин не удался.

Пожалуйста, проверьте приведенную ниже ссылку:

[EDIT]: ссылка сломана

Существует фиксированная страница об этой проблеме на связанной странице, я не могу дать вам другую ссылку из-за моей репутации. Пожалуйста, найдите приведенную ниже цитату на странице:

Посмотрите на фиксированную страницу.

Конечно, этот подход не подходит, если у вас есть раздел входа на странице по умолчанию из-за отправки формы. Это вызывает мерцание страницы. Интересно, есть ли у кого-то идея?

Ответ 3

Вот некоторый ненавязчивый js-код jQuery, который будет передавать форму с помощью ajax (метод $.post) в реальный бэкэнд script, а также в фиктивный script через iFrame, поэтому браузер сохранит предоставленные данные для последующей автозаполнения.

Это работает отлично под хром. Любая обратная связь более чем приветствуется!

var  formframesindex = 0;
function onSubmitAjax(evt){
    var $form = $(this);
    var framesubmitting = $form.hasClass('framesubmitting');
    var action = $form.attr('action');
    var original_action = action;

    if(!framesubmitting){
        $.post(action,$form.serialize()+"&ajax=1", function(responseText,message,request){
            formResponseHandler(responseText);
        }, "json");


        formframesindex++;
        var formframe = $("<iframe name='formframe_id_"+(formframesindex)+"' id='formframe_id_"+(formframesindex)+"' class='formframe' src='/fakeformreceiver.php'></iframe>");
        $('body').append(formframe);
        var target = $form.attr('target');
        $form.data('originaltarget',target);
        $form.data('originalaction',original_action);
        $form.attr('target','formframe_id_'+formframesindex);
        $form.attr('action','/fakeformreceiver.php');
        $form.addClass('framesubmitting');
        $form.submit();

    } else {
        var current_target = $form.attr('target');
        var original_action = $form.data('originalaction');
        var original_target = $form.data('originaltarget');
        var $frame = $('#'+current_target);
        setTimeout(function(){
            if($frame && $frame.length){
                $frame.remove();
            }
            $form.attr('action',original_action);
            $form.attr('target',original_target);
            $form.removeClass('framesubmitting');
        },100);
    }
    return framesubmitting;
}