如何通过AJAX发送重定向响应时阻止浏览器重定向?

时间:2010-07-10 04:54:48

标签: jquery ajax django redirect

我正在使用Django(1.4.2)尝试AJAX-ify Django contact_form应用程序。我想让Django在验证和模板渲染方面做得很重,这样我就可以保持模板的一致性和服务器端。因此,当用户提交表单时,我将返回“部分”模板渲染以注入DOM。

几乎有效;表单提交,部分模板呈现并返回,显示验证错误等。但是,一旦表单有效,contact_form的视图将执行http重定向。我已将success_url设置为重定向到只是已发送的邮件网址。

我希望它在服务器上重定向,返回已发送的消息并用它替换表单。但是,此在Chrome中正常运行。在Firefox和IE中,整个浏览器会重定向到我发送的消息URL。

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

1 个答案:

答案 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

     

此规范不包括为本规范的未来版本考虑的以下功能:

     
      
  • 要禁用以下重定向的属性;
  •