我有简单的表格
class TimeForm(forms.Form):
time = forms.TimeField()
date = forms.DateField()
def clean_date(self):
time = self.cleaned_data['time']
date = self.cleaned_data['date']
date_time = datetime.combine(date, time)
if datetime.now() > date_time:
raise ValidationError("datetime error")
return start_date
具有基于类的视图
class TimeView(View):
@staticmethod
def post(request):
form = TimeForm(request.POST)
if form.is_valid():
# do something
json_data = json.dumps({'some_record': value})
else:
json_data = json.dumps({'errors': form.errors})
return HttpResponse(json_data, content_type='application/json')
在html中,我具有提交连接为ajax的标准表单
<form action="/time_url/" method="POST" id="time_form">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
<script>
$('#time_form').submit(function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: '/time_url/',
dataType: 'json',
data: $(this).serialize(),
success: function(data, textStatus, jqXHR){
alert('yay');
}
})
});
</script>
,我希望能够提交此表单而无需重新加载页面。一切似乎都工作正常,但是没有触发ajax的成功功能,而是使用json数据将页面重定向到/ time_url /。不管表单是否有效,它都会被重定向。
我也尝试过
return JsonResponse(form.errors.get_json_data())
代替
return HttpResponse(json_data, ...)
如此处Django form submit with ajax所示,但没有成功。
我是Java语言的新手,但对我来说,这似乎是ajax的问题,因为正确的数据由服务器提供。
感谢任何提示。