ajax - 如何将失败响应从 django 发送到 ajax

标签 ajax django

我有这个 Ajax 请求:

    $.ajax({
            url: "my_url",
            headers: {'X-CSRFToken': '{{ csrf_token }}'},
            type: "post",
            data:{x:1
                 },
            success: function(response, textStatus, xhr) {
                alert(response + textStatus + xhr);

            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(xhr.status + ' Error: ' + thrownError);
            }
          });

}
在 Django 方面,我有时想传播错误。
如果我引发异常,它将作为 500 响应内部错误传播。
但我想显示一条错误消息。
所以我尝试了
return HttpResponse("Bad permissions", status=500)
但我无法捕获自定义错误消息。
有任何想法吗?

对于那些想知道什么有效的人:
模板中的 Javascript
function send(){
    $.ajax({
            url: "/get_pens/",
            headers: {'X-CSRFToken': '{{ csrf_token }}'},
            type: "post",
            data:{x:1
                 },
            dataType: "json",
            success: function(response, textStatus, xhr) {
                alert('Success: ' + response + textStatus + xhr);

            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(xhr.status + ' Error: ' + xhr.responseJSON['err']);
            }
          });
}
View .py
def get_pens(request):
    pens = []
    response = HttpResponse(json.dumps({'pens': pens, 'err': 'some custom error message'}), 
        content_type='application/json')
    response.status_code = 400
    return response

最佳答案

您可以解决此问题的一种方法如下,

您在 block 周围的代码周围有适当的尝试异常 block ,这些 block 容易引发异常。有很多 Exception 子类可以涵盖引发的异常类型,例如。模型.DoesNotExist。在这些异常 block 中,您只需创建适当的 HttpResponse 并将其发送回来。让我们在这里举个例子。

class DemoView(View):
    def post(self, request, oid, *args, **kwargs):
    try:
        object = Model.objects.get(id=oid)
    except Model.DoesNotExist:
        return HttpResponseNotFound('error message')

这样,您的错误 block 将在您的 ajax 函数中执行。你可能认为这是一种方法,对我来说似乎是一种正确的方法。

更新:
根据您(OP)在下面发表的评论,您可以按照以下方式创建回复
def bad_request(message):
    response = HttpResponse(json.dumps({'message': message}), 
        content_type='application/json')
    response.status_code = 400
    return response

当您想返回状态 400 时,您只需执行以下操作,
return bad_request(message='This is a bad request')

因此,在此之后,在您的 ajax 错误函数中,您可以使用以下来获取该消息,
xhr.responseJSON.message

关于ajax - 如何将失败响应从 django 发送到 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734658/

相关文章:

jquery - 如何使用 ajax 发布包含动态表中的字段的表单,可以为其动态添加行和列

python - web2py 中的 ajax 响应

python - 将 token 传递给客户端

python - 使用框架(尤其是 Django)进行 Web 开发的一些好的初学者指南是什么?

python - '_' 在 Django 代码中做什么?

django - 旧 Django 版本的文档在哪里?

php - 使用 ajax 删除使用 glob() 显示的图像

javascript - 使用 jquery 或 ajax 将值传递到另一个页面

Django - 如何每天运行一个函数?

jquery - 无法从同一个 AJAX TinyMCE 文本区域发布两次