我正在使用Django(1.4.2)尝试AJAX-ify Django contact_form应用程序。我想让Django在验证和模板渲染方面做得很重,这样我就可以保持模板的一致性和服务器端。因此,当用户提交表单时,我将返回“部分”模板渲染以注入DOM。
几乎有效;表单提交,部分模板呈现并返回,显示验证错误等。但是,一旦表单有效,contact_form的视图将执行http重定向。我已将success_url
设置为重定向到只是已发送的邮件网址。
我希望它在服务器上重定向,返回已发送的消息并用它替换表单。但是,此仅在Chrome中正常运行。在Firefox和IE中,整个浏览器会重定向到我发送的消息URL。
有没有办法让重定向到仅影响AJAX响应而不是重定向整个浏览器?
答案 0 :(得分:2)
这是不可能的。 FF和IE按照W3规范正确运行。
以下是W3 XMLHttpRequest
specification的第4.6.4节的摘录:
4.6.4. Infrastructure for the send() method
如果响应是HTTP重定向
如果重定向没有违反安全性(例如same origin),无限循环预防措施,并支持该方案,透明地遵循重定向,同时观察{{3} }。
HTTP重定向基本上指示客户端向指定位置发出全新的HTTP GET请求。您最好的选择是将服务器端 包含或转发转换为所需的资源。
或者你也可以让它代替返回一些JSON,它应该在一些回调函数中通知你的jQuery代码,它应该重新触发JSON返回的URL上的新的ajaxical请求。
然而,添加属性以禁用以下重定向是未来的考虑因素。这是另一个摘录:
same-origin request event rules
此规范不包括为本规范的未来版本考虑的以下功能:
- 要禁用以下重定向的属性;