用AJAX

时间:2017-11-29 09:08:08

标签: jquery python html ajax django

首先,我是Django的新手,几乎完全不熟悉AJAX和jQuery。 我在本地开发。

所以我试图在AJAX的帮助下,每隔X秒动态刷新一次HTML表,动态刷新(没有页面刷新),但我似乎无法让我的代码工作。我已经使用了此问题中提供的示例:https://stackoverflow.com/a/34775420/6724882

(如果我有足够的代表,我会回答这个问题,或者从聊天中寻求帮助,但我还没有那么奢侈)

我一直试图让这个工作10个多小时,我开始感到无助。我一直在疯狂地搜索网络,但是我对所有不同的方式都感到不知所措,而且每个问题和答案似乎要么已经太久了,要么与我的应用程序无关。

目前,该表适用于第一个查询,它显示对象Kala与rivinumero = 1(英语为rownumber)。

所以,我有几个问题。

  • 我应该将脚本包含在自己的单独文件中,而不是在 HTML文件(在我的例子中,displaykala.html)。如果是,那该文件应该是 在static / js文件夹中,还是在其他地方?
  • 我是否需要单独在某处包含AJAX / JS,以使脚本正常工作?
  • 我明显做错了什么,或者我提供的问题的答案是错误的?

displaykala.html(脚本位于同一文件中)

{% load static %}
{% include 'loginbar.html' %}
{% include 'nav.html' %}
<html>
    <head>
        <title>Display</title>
        <link rel="stylesheet" type="text/css" href="{% get_static_prefix %}css/style.css">
    </head>
    <body>
            <h1>Display</h1>
            <table id="_appendHere" class="table table-striped table-condensed">
                        <tr>
                          <th>Id</th>
                          <th>Nimi</th>
                          <th>Latnimi</th>
                        </tr>
                        {% for kala in kalat %}
                        <tr>
                          <td>{{kala.rivinro}}</td>
                          <td>{{kala.tuote}}</td>
                          <td>{{kala.latinalainen_nimi}}</td>
                        </tr>
                        {% endfor %}
                      </table>
    </body>
</html>

<script>
    var append_increment = 0;
    setInterval(function() {
        $.ajax({
            type: "GET",
            url: {% 'get_more_tables.html' %},  // URL to your view that serves new info
            data: {'append_increment': append_increment}
        })
        .done(function(response) {
            $('#_appendHere').append(response);
            append_increment += 10;
        });
    }, 1000)
</script>

get_more_tables.html

{% load static %}
{% for kala in kalat %}
<tr>
   <td>{{ kala.rivinro }}</td>
   <td>{{ kala.tuote }}</td>
   <td>{{ kala.latinalainen_nimi }}</td>
</tr>
{% endfor %}

views.py

from django.shortcuts import render
from adminside.models import Kala
from adminside.models import Liha
from django.contrib.auth.decorators import login_required
# Create your views here.

def index(request):
    return HttpResponse("Index")

@login_required
def displaykala(request):
    kalat = Kala.objects.filter(rivinro=1)
    return render(request, 'displaykala.html', {'kalat': kalat})

@login_required
def get_more_tables(request):
    increment = int(request.GET['increment'])
    increment_to = increment + 10
    kalat = Kala.objects.filter(rivinro=2)[increment:increment_to]
    return render(request, 'get_more_tables.html', {'kalat': kalat})

urls.py(app文件夹中的一个)

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^displayk$', views.displaykala, name='displayk'),
    url(r'^get_more_tables', views.get_more_tables, name='get_more_tables'),
]

我很抱歉,如果有“是的,我试过这样做”代码中的那种愚蠢的实验。

1 个答案:

答案 0 :(得分:0)

非常感谢@DanielRoseman。 “你的JS将值作为append_increment发送,但Python正在尝试访问增量。 - ”

我将有问题的行更改为increment = int(request.GET.get('append_increment'))并修复了错误,现在表格正在动态更新。非常感谢您花费宝贵的时间。现在我可以继续构建应用程序了!