【发布时间】:2020-08-29 19:41:57
【问题描述】:
当我尝试使用 ajax 将数据保存到数据库时遇到问题。
它总是给我success .. 这意味着它工作正常.. 但它没有将数据保存到数据库。
我也尝试在console.log(data.message) 中打印'message': 'form is saved',但它总是给我undefined
观看次数
@login_required(login_url='login')
def PostCreateView (request):
form = PostCreateForm()
if request.is_ajax():
form = PostCreateForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
data = {
'message': 'form is saved'
}
return JsonResponse(data)
context = {
"form": form,
}
return render(request, "blog/new_post.html", context)
urls.py
path('new_post/', PostCreateView, name='new_post'),
new_post.html
<form method="POST" enctype="multipart/form-data" class="my-ajax-form" data-url="{% url 'new_post' %}">
{% csrf_token %}
{{form|crispy}}
<input class="btn btn-secondary mt-4" type="submit" value="Add New Post">
</form>
plugins.js
$(document).ready(function () {
var $myForm = $('.my-ajax-form'); // select form class
$myForm.submit(function (event) {
event.preventDefault();
var $formData = $myForm.serialize(); // get all data from form which will be submitted to database
var $thisURL = $myForm.attr('data-url') || window.location.href; // data-url is attribute in form
$.ajax({
method:'POST',
url: $thisURL,
data: $formData,
success: handleSuccess,
error: handleError,
});
function handleSuccess(data) {
console.log('success');
console.log(data.message);
$myForm[0].reset();
}
function handleError(ThrowError) {
console.log('error');
console.log(ThrowError);
}
});
});
我在这里尝试了大量的问题和答案..两天没有结果。
任何机构都可以帮忙吗?
提前致谢
【问题讨论】:
-
首先,你能显示你的forms.py吗?另外,您是否尝试在提交后打印
instance的值。为什么你有两个表单变量?试着只放一个。在is_ajaxif 语句之外添加form = PostCreateForm(request.POST)
标签: jquery ajax forms submit django-3.0