【发布时间】:2021-03-31 15:51:22
【问题描述】:
我正在关注关于 ajax 如何在 Django 上工作的教程,这是我第一次使用 ajax,我遇到了一个小问题,数据插入正在工作,但成功的 ajax 并没有正确重定向,谢谢你的帮助 这是代码
views.py:
class exo(View):
def get(self, request):
form = ExerciseForm()
tasks = task.objects.all()
context = {
'form': form,
'tasks': tasks
}
return render(request, 'coach/test.html',
context=context)
def post(self, request):
form = ExerciseForm()
if request.method == 'POST':
form = ExerciseForm(request.POST)
print(form)
if form.is_valid():
print('adding task', form)
new_exrercise = form.save()
return JsonResponse({'task': model_to_dict(new_exrercise)}, status=200 )
else:
print('not adding task')
return redirect('exo')
ajax 函数:
$(document).ready(function(){
$("#addExercise").click(function() {
var serializedData = $("#TaskForm").serialize();
$.ajax({
url: $("TaskForm").data('url'),
data : serializedData,
type: 'post',
success: function(response) {
$("#taskList").append('<div
class="card"><div class="card-body">'+ response.task.name
+'<button type="button" class="close float-right"> <span
aria-hidden="true">×</span></button></div></div>');
}
})
});
});
html内容:
<form class="submit-form" method="post" id="TaskForm"
data-url="{% url 'session' %}">
{% csrf_token %}
<div class="form-group">
{% for field in form %}
<div style="margin-bottom: 2rem;"></div>
{{field}}
{% endfor %}
<div style="margin-bottom: 2rem;"></div>
<button type="submit" class="btn btn-success dropdown-toggle " id="addExercise">Confirm</button>
</div>
</form>
这就是我得到的(我得到一个对象,没有别的) output image
当我回到页面 exo 时,插入完成 控制台向我显示帖子发送良好: [21/Dec/2020 22:25:38]“POST /coach/exo/HTTP/1.1”200 43
【问题讨论】:
-
您的
addExercise按钮将首先提交表单,因为该表单意味着您发出 POST 请求并因此加载新页面,它永远不会 执行 AJAX 请求,您应该将<button type="">更改为只是一个通用按钮,因此删除type="submit"。 -
谢谢,我做到了,它不再发布了,直到我从一个视图切换到一个我不知道为什么的功能,但它现在运行良好
标签: json django ajax redirect post