Django 视图无法在 ajax 成功时返回 json?

Posted

技术标签:

【中文标题】Django 视图无法在 ajax 成功时返回 json?【英文标题】:Django view doen't able to return json on ajax success? 【发布时间】:2016-08-01 06:08:39 【问题描述】:

我已经尝试过 JsonResponse 和 HttpResponse(以及 json.dumps),但即使 ajax 恢复成功,返回的 json 也无法被 $.parseJSON(returned_json) 解析。

我确定问题不在于解析($.parseJSON(returned_json)),方法是在终端中打印出 json.dumps 值并将该值复制到变量中并将其提供给 $.parseJSON,并成功解析它.

我尝试传递最简单的 json,但它也失败了,我在下面展示了它的示例: 在views.py中

from django.http import JsonResponse

在我看来正在处理 ajax:

return JsonResponse("stat":"Success")

在我的 ajax 文件中:

$.ajax(
    url:"feed/get_comments/",
    type: "GET",
    data:c_id: cid, //cid is a variable initialized above and not creating any problem
    success: function(ret_json)
        alert("Inside success"); //Running everytime
        var sam_json = '"stat":"Success"'; //same as what is given in JsonResponse
        var data = $.parseJSON(ret_json); //for debugging change to sam_json
        alert(data); //with sam_json alerting with dictionary, with ret_json not giving any alert
    ,

如果我使用 json.dumps 和 HttpResponse 而不是 JsonResponse,同样的事情正在发生。 从上面我只能得出结论,即使 json.dumps 成功转换为 json 格式(因为我复制了这个并粘贴到 ajax 变量中),JsonResponse 和 HttpResponse 也没有返回 json 格式的数据。请帮忙。

【问题讨论】:

我也试过了,但没用。 dataType:"json" 定义返回的类型,如果我们显式解析它(使用 $.parseJSON()),我们可以跳过它 【参考方案1】:

通过HttpResponse和json dump,可以像这样在js中获取响应数据

var val = $.ajax(
    url:"feed/get_comments/",
    type: "GET",
    data:c_id: cid, //cid is a variable initialized above and not creating any problem
    success: function(ret_json)
        alert("Inside success"); //Running everytime
        var sam_json = '"stat":"Success"'; //same as what is given in JsonResponse
        var data = jQuery.parseJSON(val.responseText); //for debugging change to sam_json
        alert(data); //with sam_json alerting with dictionary, with ret_json not giving any alert
     ,    

val.responseText 将查看您发送的数据。

【讨论】:

【参考方案2】:

parseJSON 不需要。

由于您只是在使用字典,因此您可以像使用 javascript 中的任何其他字典一样访问它

例如。

alert(ret_json.stat);

【讨论】:

以上是关于Django 视图无法在 ajax 成功时返回 json?的主要内容,如果未能解决你的问题,请参考以下文章

Django - Ajax 注册

从 Ajax 调用 Django 视图

在Django视图函数中无法检索AJAX请求数据值。

ajax 形式 is_valid 返回 false (django)

如何从 Django 视图中获取价值到 Ajax 成功函数中

使用 ajax 时,Django 视图不呈现模板