我想向我的服务器发送一个ajax Post请求,其中一个param可以像对象一样使用:
student_name = request.data.get('student_info', {}).get('name')
当我发送这样的参数时:
student_info:{“name”:“Tom”,“age”:20}
它产生以下错误:
AttributeError: 'unicode' object has no attribute 'get'
最好的答案是我不需要改变我的后端, 并通过正确发送数据来解决我的问题。
此致
答案 0 :(得分:0)
request.data只是从前端发布的字符串。
你可以这么做,
student_name = request.data.get('student_info', {})['name']
你也可以这样做,
import json
student_name = json.loads(request.data.get('student_info')).get('name')
但是,如果request.data中没有student_info,这可能会引发错误。
以前的回答是我身边的错误。我代表他道歉。
答案 1 :(得分:0)
您需要发送Json内容而不是密钥字符串值:
data: JSON.stringify({"student_info":"{'name':'Tom', 'age': 20}'})
您的错误request.data.get('student_info', {})
返回一个字符串,因此您无法使用name
get('name')
Django中的json.loads(request.data.get('student_info', {}))
部分:)
答案 2 :(得分:0)
我希望您在前端对数据进行字符串化。我曾经通过从ajax发送数据解决了这个问题,如下所示:
var js = {"name":"nguyen","age":"1"};
$.post("/", {'data': JSON.stringify(js)}, function(ret){
console.log(ret)
});
答案 3 :(得分:0)
您应该从客户端发送JSON对象。设置
Content-Type: application/json
在您的请求标头中,并在请求正文中编写您的对象,如下所示:
{"student_info":{"name":"Tom", "age": 20}}
然后你会直接得到一个物体。
就这么简单:)