django - 避免双重调用 GET Ajax 加载
问题描述
好吧,我正在尝试使用 django 为数据库创建图形界面。我不得不说我正在努力学习,所以我对框架没有太多经验,只是使用纯代码。
我的疑问是: - 尝试使用复选框创建过滤器系统时,我使用 Ajax 能够更新视图而无需刷新。像这样:
$(document).on('click','#console_check_filter',function(){
var ps_id;
ps_id = $(this).attr("data-posts-id");
$.ajax({
url: "{% url 'list-view' %}",
method: 'POST',
data: {
'getfilter': ps_id,
'csrfmiddlewaretoken': '{{ csrf_token }}',
},
success: function (res, status,data) {
$("#list").load("/game/list-view");
},
error: function (res,ras,rus) {
}
});
});
但是我遇到的错误是,对于我使用 POST 进行的每次调用,AJAX 函数 ().load() 都会进行另一个调用,从而消除了给我 POST 的变量。这使我无法使用从 POST 收到的信息来创建过滤器。结果:我单击复选框,在控制台中我收到一个带有过滤列表的调用,然后是另一个没有过滤器的调用,因为它不仅是最后一个渲染的,没有数据。为了解决这个问题,我使用 globar 变量将值保存在 POST 中,然后 ().load() 返回以使用保存在 GLOBAL 中的值进行 GET 调用。
filet=""
def game_list(request):
global filet
context = {}
game_filter = request.GET.get('console_check_filter')
games = Game.objects.all()
game_post = games
data = {'success': False}
page = request.GET.get('page',1)
game_console_filter=""
context['games'] = games
#if request.method=='POST':
game_console_filter = request.POST.get('getfilter')
if not game_console_filter:
game_console_filter = request.GET.get('getfilter')
if request.method=="POST":
filet = get_game_console_filter(request,game_console_filter)
context['games'] = games
context['game_post'] = filet
return render(request,'Jocs/list-view.html',context )
这对我来说似乎并不优雅,我已经走出困境,是的,但我认为这不是最好的解决方案。
有什么想法可以避免这种情况发生在我身上吗?
问候,非常感谢你所做的一切
解决方案
显然我比我想象的还要愚蠢。最后的解决方案是通过 URL 发送变量。例子:
阿贾克斯:
$(document).on('click','#console_check_filter',function(){
var ps_id;
ps_id = $(this).attr("data-posts-id");
$.ajax({
url: "{% url 'list-view' %}",
method: 'POST',
data: {
getfilter': ps_id,
csrfmiddlewaretoken': '{{ csrf_token }}',
},
success: function (res, status,data) {
$("#list").load("/game/list-view/?filters="+ps_id); > <-----HERE
},
error: function (res,ras,rus) {
}
});
});
视图.py:
#if request.method=='POST':
game_console_filter = request.POST.get('getfilter')
if not game_console_filter:
game_console_filter = request.GET.get('filters') <---HERE
我认为,如果这是正确的方法,至少它会更优雅。
我希望其他人会发现这个答案很有用。很抱歉给您带来不便并提出一些琐碎的问题。祝福大家。
推荐阅读
- javascript - 在 Html/CSS/JS 中将文本格式化到图像的右侧
- python - PHP调用python脚本但不返回结果
- python - AttributeError: 'SimpleImputer' 对象没有属性 'mean'
- ios - 在弹出视图控制器快速故事板解除后更新 tableView
- linux-kernel - 为什么 `native_write_msr` 支配我的分析结果?
- cmake - cmake,将外部程序的结果作为预处理器定义传递
- c - 在 printf 中使用“%e”时是否需要使用“.6”精度说明符?
- python - 在 Python 的袖扣中使用带有键的列表以获得最佳拟合线
- ios - SwiftUI DragGesture onEnded 在某些情况下不会触发
- c# - 减少 C# 中的 Foreach 循环