来自 Django 的 JsonResponse 没有将提到的键值对发送到 Reactjs
Posted
技术标签:
【中文标题】来自 Django 的 JsonResponse 没有将提到的键值对发送到 Reactjs【英文标题】:JsonResponse from Django not sending the mentioned key value pair to Reactjs 【发布时间】:2020-04-15 23:23:02 【问题描述】:我正在尝试使用 react 从 Django API 获取响应,但我传递的键值对在响应中不可见。
React 获取代码
handleClick(i)
.
.
.
if (i != '=')
.
.
else
// CODE TO FETCH FROM DJANGO API
fetch('http://127.0.0.1:8000/solve/',
method: 'POST',
body: "expression":this.state.content
).then((response)=> console.log(response))
Python 代码
# Create your views here.
@api_view(["POST"])
def solveExpression(expression_json):
try:
math_expr = expression_json.data["expression"]
result = eval(math_expr)
data = "result":result #This is the data I want to send to reactjs
return JsonResponse(data)
except Exception as e:
return JsonResponse("Error:" + str(e), safe = False)
但不幸的是,我得到的回复中没有关键的“结果”。
请纠正我犯的错误,因为我对 reactjs 很陌生。
【问题讨论】:
【参考方案1】:fetch
默认返回与其执行的 AJAX 调用相关的所有元数据。
您的实际响应将在body
属性中作为ReadableStream
:
尝试通过在响应中调用 .json()
来获取正文。
另外,fetch
需要一个字符串化的body
作为请求负载。因此,您还必须致电JSON.stringify
提出您的请求body
来,试试看:
handleClick(i)
...
if (i != '=')
...
else
// CODE TO FETCH FROM DJANGO API
fetch('http://127.0.0.1:8000/solve/',
method: 'POST',
body: JSON.stringify(
"expression": this.state.content
)
)
.then((response) => response.json())
.then(finalResponse => console.log(finalResponse))
【讨论】:
当我尝试上面显示的代码时,[错误:请求中不支持媒体类型“text/plain;charset=UTF-8”] @StarRider,我已经更新了我的答案。您还必须将JSON.stringify
调用到分配给请求的body
的对象。这样做应该可以解决您遇到的这个错误。以上是关于来自 Django 的 JsonResponse 没有将提到的键值对发送到 Reactjs的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中创建 UTF-8 JsonResponse