英文:
JAVASCRIPT: After sending Item to Database (POST) the window.location.reload() does not work. How to refresh the Data in HTML-Template?
问题
我在YouTube上录制了一个教程。 Django,Python,HTML和JavaScript。一切都正常,除了window.location.reload()函数。
我尝试了一些解决方法,包括:
windows.reload(true),window.href = window.href,location = self.location,
以及其他一些方法。
我有一种直觉,即刷新操作在刷新之前或在刷新期间执行。但我不确定。
目标是将输入的数据发送到数据库,然后刷新页面。
这是教程中的代码:
index.html(缩短版)
<body>
    <header>
        <h1>购物清单</h1>
        <div id="input-field">
            <label for="item-input">你想买什么?</label>
            <input type="text" name="item" id="item-input">
        </div>
        <button id="btn" onclick="addItem()">+</button>
    </header>
    <div id="item-table">
        {%  for row in all_items %}
        <div class="list-item">
            <input type="checkbox"> {{row.name}}
        </div>
        {% endfor %}
    </div>
    <script>
        function addItem(){
            let itemName = document.getElementById("item-input").value;
            let formData = new FormData();
            let token = '{{csrf_token}}';
            formData.append('itemName', itemName);
            formData.append('csrfmiddlewaretoken', token);
            fetch('/mylist/', {
                method: 'POST',
                body: formData
            });
            window.location.reload();
        };
    </script>
</body>
</html>
views.py
from django.shortcuts import render
from .models import ShoppingItem
# Create your views here.
def mylist(request):
    if request.method == 'POST':
        print('Received date: ', request.POST['itemName'])
        ShoppingItem.objects.create(name=request.POST['itemName'])
    all_items = ShoppingItem.objects.filter(done=0)
    return render(request, 'index.html', {'all_items': all_items})
models.py
from django.db import models
from datetime import date
# Create your models here.
class ShoppingItem(models.Model):
    createDate = models.DateField(default=date.today)
    name = models.CharField(max_length=200)
    done = models.BooleanField(default=False)
    def __str__(self):
        return '(' + str(self.id) + ') ' + self.name
英文:
I recode a Tutorial on Youtube.
Django, Python, HTML an Javascript.
Everthing works fine exept the window.location.reload() function.
I try some workarounds with
- 
windows.reload(true),
 - 
window.href = window.href
 - 
location = self.location
 
and some more.
I have a hunch that the reload is executed before or during the code before the reload. But I do not know.
The goal is to send the data from the input to the database and only then refresh the page.
This ist the Code from the tutorial:
index.html (shortened)
<body>
    <header>
        <h1>Shoppinglist</h1>
        <div id="input-field">
            <label for="item-input">Was möchtest du einkaufen?</label>
            <input type="text" name="item" id="item-input">
        </div>
        <button id="btn" onclick="addItem()">+</button>
    </header>
    <div id="item-table">
        {%  for row in all_items %}
        <div class="list-item">
            <input type="checkbox"> {{row.name}}
        </div>
        {% endfor %}
    </div>
   
    <script>
        function addItem(){
            let itemName = document.getElementById("item-input").value;
            let formData = new FormData();
            let token = '{{csrf_token}}';
            formData.append('itemName', itemName);
            formData.append('csrfmiddlewaretoken', token);
            fetch('/mylist/', {
                method: 'POST',
                body: formData
            });
            window.location.reload();
        };
    </script>
</body>
</html>
views.py
from django.shortcuts import render
from .models import ShoppingItem
# Create your views here.
def mylist(request):
    if request.method == 'POST':
        print('Received date: ', request.POST['itemName'])
        ShoppingItem.objects.create(name = request.POST['itemName'])
    all_items = ShoppingItem.objects.filter(done = 0)
    return render(request, 'index.html', {'all_items':all_items})
models.py
from django.db import models
from datetime import date
#Create your models here.
class ShoppingItem(models.Model):
    creatDate = models.DateField (default=date.today)
    name = models.CharField (max_length =200)
    done = models.BooleanField(default=False)
    def __str__(self):
        return '(' + str(self.id) +') ' +self.name
答案1
得分: 0
尝试这样做:
async function addItem() {
  let itemName = document.getElementById("item-input").value;
  let formData = new FormData();
  let token = "{{csrf_token}}";
  formData.append("itemName", itemName);
  formData.append("csrfmiddlewaretoken", token);
  await fetch("/mylist/", {
    method: "POST",
    body: formData,
  });
  window.location.reload();
}
英文:
Try this:
async function addItem() {
  let itemName = document.getElementById("item-input").value;
  let formData = new FormData();
  let token = "{{csrf_token}}";
  formData.append("itemName", itemName);
  formData.append("csrfmiddlewaretoken", token);
  await fetch("/mylist/", {
    method: "POST",
    body: formData,
  });
  window.location.reload();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论