我使用ajax提交表单。 这是我写的一段代码:
$.post(this.action, $(this).serialize())
.done(function(data) {
form.find(".success-msg").text(data);
})
.fail(function() {
// insert error msg to the form
})
.always(function() {
modal.modal("hide");
});
如何在失败处理程序中获取服务器响应? .fail()回调函数不会像.done()那样获取返回的数据。
其次,为服务器上发生的表单验证错误返回非200(例如40X)状态是否正确?或者我应该返回200 OK状态,并以某种方式在我自己的响应中区分错误/成功?
即验证错误我可以这样做
return HttpResponse(error_msg)
,或者
return HttpResponseBadRequest(error_msg)
答案 0 :(得分:1)
在done
部分中:
.done(function(data) {
form.find(".success-msg").text(data);
});
但在fail
中你没有包含data
参数。如果你想使用它,你应该包括它:
.fail(function(data) {
// insert error msg to the form
});
关于另一个问题 - 如果你知道失败的原因 - 我认为最好回复200
并在回复内部有一个status: true/false
和其他数据。这样,如果你有其他错误代码(服务器没有响应/服务器错误/等),你可以使用不同的函数/行为。
答案 1 :(得分:1)
这可能会迟到,但最近我遇到了同样的问题,这是我的解决方案。
.error(function(xhr){
var result = xhr.responseJSON;
form.find(".error-message").text(result.data);
});
您可以随时控制日志xhr.responseJSON,以确保返回的内容。