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

StackOverflow https://stackoverflow.com/questions/1622628

Вопрос

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

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

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

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

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

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

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

Позвони Меланну

Это было полезно?

Решение

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

Другие советы

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

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

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

[ПРАВИТЬ]:Ссылка разорвана

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

Посмотрите на исправленную страницу.

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

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

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

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top