我有一个带有表单的网页的Pyramid应用程序。我在表单POST后使用window.location = XXX但是我被告知这不是SEO友好的。
因此,我正在尝试在服务器端进行重定向。我所做的是在我的金字塔应用程序中添加一个视图mydomain.com/redirect。转到此地址会返回301到目标页面:
return HTTPMovedPermanently(location=location)
现在,在我的网页中,我在/ redirect页面添加了一个jQuery POST。看看firebug,帖子确实发生了,它回来了301,然后我的浏览器GET是目标页面,但是没有物理重定向到它 - 我错过了什么?
答案 0 :(得分:0)
jQuery在收到3xx响应时不会重定向浏览器。它只会遵循AJAX请求中的重定向。这是XmlHttpRequest的标准行为,我很确定它无法更改。
您想要的不是使用JavaScript提交表单并使用HTTP重定向,或者在收到肯定响应时使用JavaScript并使用window.location。
执行此类操作的常用方法是假设客户端首先没有JavaScript。然后,一旦所有内容都在没有JavaScript的情况下运行,您可以在其上添加JavaScript,并为拥有JavaScript的用户提供更好的体验。
也就是说,如果您打算在表单子目录后重定向客户端,则可能根本就不使用AJAX。如果您要进行验证,则可以阻止JavaScript中的表单子目录,直到表单有效。
此外,提交表单后重定向的状态代码通常是302,而不是301。