【发布时间】:2016-01-20 14:42:55
【问题描述】:
我有一个对 Django 视图方法的 ajax 调用:
$("#formi").submit(function(event){
event.preventDefault();
var data = new FormData($('form').get(0));
$.ajax({
type:"POST",
url:"{% url 'calculate' %}",
data: data,
processData: false,
contentType: false,
csrfmiddlewaretoken: '{{ csrf_token }}',
success: function(data){
...
},
error : function(xhr) {
console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
}
});
});
这里我通过提交给views.py的表单发送一个.txt来计算一些东西。
这是我的方法:
def calculate(request):
if request.is_ajax() and request.method == "POST":
if len(request.FILES) != 0:
data = request.FILES['some_file']
if '.txt' in data.name:
... calculate...
return HttpResponse(data, content_type="application/json")
else:
raise Http404("No File uploaded")
else:
raise Http404("No File uploaded")
else:
raise Http404("No POST data was given.")
如您所见,我有 else 语句,以防 a- 不是 ajax 调用 - b- 请求中没有文件 - 并且 c- “.txt”不在文件名中
但是这些else 语句都不起作用。我认为是因为 ajax error 部分,但我无法弄清楚。
如果没有满足这些要求,我如何显示消息、Django 消息或 javascript 警报消息。 也许通过 javascript 创建一个带有消息的新 div。
主要问题当然是验证没有完成。
提前感谢您提供的任何帮助。
【问题讨论】:
-
在你的JS报错函数中,在你记录xhr.satus之前,能不能加上“console.log('here');”然后让我知道当您发送错误请求时,所有内容都会记录到控制台?编辑:另外,在您的python代码中,您能否在引发每个错误之前添加一个打印语句,并让我知道当您发送错误请求时打印语句是否打印到终端上?仅用于调试目的...
-
好的。我会这样做并让你知道
-
您是否尝试改用
raise ValidationError('...errormessage...')?
标签: javascript jquery python ajax django