gpt4 book ai didi

ajax - request.is_ajax() == 点击后退按钮时为真?

转载 作者:行者123 更新时间:2023-12-04 22:58:39 26 4
gpt4 key购买 nike

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

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

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

说明

这是在 Chrome (16.0.912.77) 中发生的

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

最佳答案

来自Django docs :

Returns True if the request was made via an XMLHttpRequest, by checking the HTTP_X_REQUESTED_WITH header for the string 'XMLHttpRequest'.

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

编辑

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

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

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

关于ajax - request.is_ajax() == 点击后退按钮时为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com