Jquery 当通过AJAX发送重定向响应时,如何防止浏览器重定向?

Jquery 当通过AJAX发送重定向响应时,如何防止浏览器重定向?,jquery,ajax,django,redirect,Jquery,Ajax,Django,Redirect,我正在尝试使用Django(1.4.2)将Django联系人表单应用程序AJAX化。我想让Django在验证和模板呈现方面承担重任,这样我就可以保持模板的一致性和服务器端的一致性。因此,我将返回“部分”模板渲染,以便在用户提交表单时注入DOM 它几乎起作用了;表单提交、部分模板呈现并返回、显示验证错误等。但是,一旦表单有效,contact_表单的视图将执行http重定向。我已将success\u url设置为仅重定向到已发送消息的url 我希望它在服务器上重定向,返回发送的消息并用它替换表单。然

我正在尝试使用Django(1.4.2)将Django联系人表单应用程序AJAX化。我想让Django在验证和模板呈现方面承担重任,这样我就可以保持模板的一致性和服务器端的一致性。因此,我将返回“部分”模板渲染,以便在用户提交表单时注入DOM

它几乎起作用了;表单提交、部分模板呈现并返回、显示验证错误等。但是,一旦表单有效,contact_表单的视图将执行http重定向。我已将
success\u url
设置为仅重定向到已发送消息的url

我希望它在服务器上重定向,返回发送的消息并用它替换表单。然而,这只能在Chrome中正常工作。在Firefox和IE中,整个浏览器重定向到我发送的消息url


有没有办法让重定向到只影响AJAX响应而不重定向整个浏览器?

这是不可能的。FF和IE的行为符合W3规范

以下是第4.6.4章的摘录:

  • 如果响应是HTTP重定向

    如果重定向不违反安全性(例如),无限循环预防措施,并且支持该方案,在观察过程中透明地遵循重定向

HTTP重定向基本上指示客户端向给定位置发出全新的HTTP GET请求。您最好的选择是在服务器端执行包含或转发到所需资源

或者,您也可以让它返回一些JSON,它应该在某个回调函数中通知jQuery代码,它应该在JSON返回的URL上重新触发一个新的ajaxical请求

不过,添加一个属性以禁用以下重定向是未来的考虑事项。下面是另一个摘录:

本规范不包括本规范未来版本所考虑的以下特性:

  • 属性以禁用以下重定向

那么包装视图就这么多了,看来我只需要重写它们。