我使用AJAX在我的登录页面上进行快速输入验证。如果一切正确,用户将被重定向。
这里是代码:
$(form).submit(function () { $.post($(this).attr('action'),$(this).serialize(),function (data) { if (data.status == 'SUCCESS') { window.location = data.redirectUrl; } } ...
它在所有浏览器中工作得很好。但Chrome中有一个问题。它不提供保存密码。
当JavaScript关闭时,密码被保存,所以问题肯定是重定向到一个新的位置。
如何解决这个问题?
解决方法
我发现了一个脏的解决方法为这个问题,通过插入一个不可见的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',function (data) { if (data.status == 'SUCCESS') { window.location = data.redirectUrl; } }) })
诀窍是,真的有两个请求。首先,表单提交到/blank.html,这将被服务器忽略,但这会触发Chrome中的密码保存对话框。此外,我们做一个ajax请求,并提交真实的形式/ login。由于第一个请求的目标是一个不可见的iframe页面不刷新。
如果您不想重定向到另一个页面,这当然更有用。如果你想重定向无论如何改变action属性是一个更好的解决方案。
编辑:
这里是一个简单的JSFiddle版本的它。与注释部分的声明相反,没有重新加载所需的页面,它似乎工作非常可靠。我在Win XP的Chrome和Linux的Chromium测试了。