使用jQuery和Pyramid进行URL重定向?

0 投票
1 回答
681 浏览
提问于 2025-04-16 23:06

我有一个用Pyramid框架做的网页,上面有个表单。在表单提交后,我之前使用的是window.location = XXX来跳转页面,但有人告诉我这样做对搜索引擎优化(SEO)不好。

所以,我现在想在服务器端进行重定向。我在我的Pyramid应用里添加了一个视图,地址是mydomain.com/redirect。访问这个地址会返回一个301状态码,指向目标页面:

return HTTPMovedPermanently(location=location)

现在,在我的网页里,我添加了一个jQuery的POST请求,指向/redirect这个页面。从firebug的监控来看,POST请求确实发送了,收到了301的响应,然后我的浏览器又请求了目标页面,但并没有实际跳转过去——我漏掉了什么呢?

1 个回答

0

jQuery在收到3xx的响应时不会让浏览器重定向。它只会在AJAX请求中跟随重定向。这是XmlHttpRequest的标准行为,我相信这是无法改变的。

你想要的可以是不要用JavaScript提交表单,而是使用HTTP重定向,或者用JavaScript,在收到成功的响应时使用window.location。

通常处理这种情况的方法是先假设用户的浏览器没有JavaScript。然后在没有JavaScript的情况下确保一切正常工作后,再添加JavaScript,让有JavaScript的用户体验更好。

也就是说,如果你想在表单提交后重定向用户,可以简单地不使用AJAX。如果你需要进行验证,可以在JavaScript中阻止表单提交,直到表单有效。

另外,表单提交后重定向的状态码通常是302,而不是301。

撰写回答