Django 返回数据 到ajax
Djnago中,HttpResponse 和JsonResponse,返回后直接取值
1.返回字符串
正常使用HttpResponse返回字符串就好
2.视图函数响应JSON数据类型:
- 使用HttpResponse响应手动序列化后JSON数据直接响应,前端得到的响应数据需要被动反序列化成对应的数据类型
- 使用HttpResponse响应手动序列化后JSON数据并设置参数content_type='application/json'前端得到的响应数据是经过JSON对象自动进行反序列化后的对应数据类型
- 使用HttpResponse响应不需要手动序列化JSON数据,直接响应即可,但是对于非字典类型的数据类型需要设置参数safe=False,前端得到的响应数据是经过JSON对象自动进行反序列化后的对应数据类型
①使用HttpResponse响应:未告知类型,前端需要被动解析
视图函数:
data={'status':[1,2,3],'info':'login'}
return HttpResponse(json.dumps(data))#直接发送json字典,前端需要被动反序列化
AJAX回调函数:
success: function (response) {//请求回调函数参数response被动反序列化
console.log(JSON.parse(response));
console.log(typeof JSON.parse(response));
②使用HttpResponse响应,告知类型,前段自动调用JSON对象解析
视图函数:
data={'status':[1,2,3],'info':'login'}
return HttpResponse(json.dumps(data),content_type='application/json')#发送json字典,告知类型
return HttpResponse(json.dumps(ret,ensure_ascii=False)) #ensure_ascii=False是告诉json不要对中文进行编码,不然返回给前端的数据中如果有中文的话会被编码成unicode类型的数据,导致前端看不到中文
AJAX回调函数:
success: function (response) {//请求回调函数参数response自动反序列化
console.log(response);
console.log(typeof response);
③使用JsonResponse响应,不需要手动进行序列化,同时也不需要告知类型,在响应除字典以外的数据类型时,需要添加参数safe=False
from django.http import JsonResponse
响应字典视图函数:
data={'status':[1,2,3],'info':'login'}
return JsonResponse(data)#使用JsonResponse,直接响应数据
响应非字典视图函数:
data=[{'status':[1,2,3],'info':'login'}]
return JsonResponse(data,safe=False)#使用JsonResponse,直接相应数据,字典以外数据类型徐设置参数safe=False
AJAX回调函数:
success: function (response) {//请求回调函数参数response自动反序列化
console.log(response);
console.log(typeof response);