单击后退按钮时,_ajax()==真吗?

单击后退按钮时,_ajax()==真吗?,ajax,django,Ajax,Django,我有一个Django应用程序,它根据页面请求是否为Ajax返回不同的响应 当我查看页面时,导航到其他位置,然后单击“上一步”按钮,请求将被呈现,就好像request.is\u ajax()的值为True一样。因此,JSON输出显示在浏览器中,而不是生成的HTML 为什么会发生这种情况,我该如何预防 澄清 这在Chrome(16.0.912.77)中发生 令人困惑的是,我实际上是在后台对该URL发出ajax请求。基本上,我重载了一个URL,这样它既能以格式化的HTML显示内容,又能以JSON的形式

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

当我查看页面时,导航到其他位置,然后单击“上一步”按钮,请求将被呈现,就好像
request.is\u ajax()
的值为True一样。因此,JSON输出显示在浏览器中,而不是生成的HTML

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

澄清 这在Chrome(16.0.912.77)中发生

令人困惑的是,我实际上是在后台对该URL发出ajax请求。基本上,我重载了一个URL,这样它既能以格式化的HTML显示内容,又能以JSON的形式提供内容(这样,随着时间的推移,我可以实时更新THML页面)。最简单的解决方案可能是为Ajax版本创建一个单独的Django url模式,尽管这很令人沮丧

如果请求是由以下人员通过
XMLHttpRequest
发出的,则返回True 使用字符串的头检查HTTP\u X\u REQUESTED\u “XMLHttpRequest”

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

编辑

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

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

这是一个很小的折衷方案,可能足以解决您的问题。

我不知道Django,但您可以检查ajax参数吗?您是否使用了上一页的某种javascript重定向?例如window.location.href?@Diodeus据我所知,根据Chris Patt的回答(),检测它的方式是通过浏览器的标题。没有参数被发送,我只是通过
jQuery.ajax()
@JamesR()请求相同的URL。不,单击一个链接然后点击后退按钮。很多年后:如果你被困在这个问题上,这里的解决方案为我解决了这个问题。对不起,应该指定:它发生在Chrome上。我将在问题中说明这一点;我还没有在其他浏览器上测试过它,看看它们是否都一样。令人沮丧的是,它并不总是这样做;然而,令人恼火的是,我必须检查这一点,而不仅仅是确定它是否是Ajax请求。这意味着我可能需要重写大量的代码。我实际上倾向于URL模式的原因是我根本不需要更改代码。我猜浏览器正在缓存jQueryAjax对URL的请求,并在我点击后退按钮时返回它。如果我给它一个可能会修复它的不同URL,而不必用If
request.request.get('json')==True
替换
request.is\ajax()