Javascript 如何在ajax httpresponse中返回django查询集
我一直在尝试检索Django queryset,并通过Ajax将其存储在Javascript变量中 我目前正在尝试使用下面的代码,但我不断收到“Queryset不可JSON序列化。我对django和JSON格式都很陌生。我如何解决这个问题?” html/javascript页面Javascript 如何在ajax httpresponse中返回django查询集,javascript,ajax,django,Javascript,Ajax,Django,我一直在尝试检索Django queryset,并通过Ajax将其存储在Javascript变量中 我目前正在尝试使用下面的代码,但我不断收到“Queryset不可JSON序列化。我对django和JSON格式都很陌生。我如何解决这个问题?” html/javascript页面 $.ajax({url: "http://127.0.0.1:8000/getPorts, success: function(result){ var res = JSON.parse(resu
$.ajax({url: "http://127.0.0.1:8000/getPorts,
success: function(result){
var res = JSON.parse(result);
}
});
views.py
def getPorts(request):
JSONer = {}
ports = Port.objects.all()
JSONer['ports'] = ports
return HttpResponse(json.dumps(JSONer))
另外,如果有人想建议一种更好的使用ajax向视图发送/检索数据的方法,我愿意听取您的建议。谢谢您您也可以使用内置的
JsonResponse
,这样您就不必调用json.dumps()
,它还可以设置正确的头
首先是JavaScript代码:
$.ajax({
url: '/getPorts',
dataType: 'json',
sucess: function (result) {
console.log(result.ports);
}
});
通过设置数据类型
,您已经得到了一个已解析的对象。此外,您不需要在url
参数中对绝对url进行硬处理
那么,在你看来:
from django.http import JsonResponse
def getPorts(request):
JSONer = {}
ports = Port.objects.values()
JSONer['ports'] = ports
return JsonResponse(JSONer)
在将queryset发送回ajax之前,可以尝试序列化它,如下所示:
from django.core import serializers
data = serializers.serialize('json', list(ports))
您可以如上所示指定所需字段。简短回答:您不需要 请理解,
queryset
不是实际的可序列化数据。它们只是帮助从数据库中查询该数据
正如其他人所指出的,只需使用
JsonResponse
或手动转储为asjson
并将其发送到HttpResponse
中,将其转换为json响应即可尝试JSONer['ports']=list(ports.values())