如何获取jquery ajax错误数据,是否是正确的响应方式?

时间:2016-12-24 17:42:31

标签: jquery ajax django forms django-forms

我使用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)

2 个答案:

答案 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,以确保返回的内容。