Я нашел грязный обходной путь для этой проблемы, вставив невидимый iframe и нацелив на него форму:
<iframe src="/blank.html" id="loginTarget" name="loginTarget" style="display:none">
</iframe>
<form id="loginForm" action="/blank.html" method="post" target="loginTarget"></form>
Соответствующий JavaScript:
$('#loginForm').submit(function () {
$.post('/login', $(this).serialize(), function (data) {
if (data.status == 'SUCCESS') {
window.location = data.redirectUrl;
}
})
})
Трюкчто на самом деле сделано два запроса.Сначала форма отправляется в /blank.html, который будет игнорироваться сервером, но это вызывает диалог сохранения пароля в Chrome.Кроме того, мы делаем запрос ajax и отправляем реальную форму в / login.Поскольку целью первого запроса является невидимый iframe, страница не обновляется.
Это, конечно, более полезно, если вы не хотите перенаправлять на другую страницу.Если вы хотите перенаправить в любом случае, лучше изменить атрибут действия.
Редактировать:
Вот его простая JSFiddle версия.Вопреки утверждениям в разделе комментариев, перезагрузка страницы не требуется, и кажется, что она работает очень надежно.Я тестировал его на Win XP с Chrome и на Linux с Chromium.