request.is_ajax()==单击后退按钮时为真?

时间:2012-02-06 16:36:01

标签: ajax django

我有一个Django应用程序,根据页面请求是否为Ajax返回不同的响应。

当我查看页面时,在其他地方导航,然后单击后退按钮,请求呈现为好像request.is_ajax()的值为True。因此,JSON输出显示在浏览器中而不是生成的HTML中。

为什么会发生这种情况,我该如何预防?

澄清

这种情况发生在Chrome(16.0.912.77)

令人困惑的是,我实际上在后台制作该URL的ajax请求。基本上,我重载了一个URL,以便它以格式化的HTML显示内容,但也使其可用作JSON(因此随着时间的推移发生变化,我可以实时更新THML页面)。可能最简单的解决方案就是为Ajax版本创建一个单独的Django url模式。

1 个答案:

答案 0 :(得分:2)

来自Django docs

  

如果请求是通过XMLHttpRequest,则返回True   检查字符串的HTTP_X_REQUESTED_WITH标头   '的XMLHttpRequest'。

所以问题是为什么按下后退按钮会将该标题附加到请求中?在任何浏览器中,这似乎都不合适。那么,你试过哪个浏览器?他们都有相同的行为吗?如果没有,您在违规浏览器中安装了哪些插件可能会导致此类问题?

修改

您不一定要创建完全独立的视图和/或urlpattern,但使用查询字符串可能不是一个坏主意。在REST中,同一视图返回多种不同的格式并不罕见,但通常这样做:

http://domain.com/some/view/      # Returns HTML
http://domain.com/some/view/?json # Returns JSON

这是一个小小的妥协,可能足以解决您的问题。