【问题标题】:Python API, consumed by JavaScript, sending JSON dataPython API,由 JavaScript 使用,发送 JSON 数据
【发布时间】:2019-05-20 19:42:45
【问题描述】:

我有用 Python 制作的 REST API,我想通过 JavaScript 使用它。 API 需要一些数据从前端作为 JSON 发送,所以我这样调用:

var xhttp = new XMLHttpRequest(),
    dataToSend = '{"key":"value"}';

xhttp.onreadystatechange = function() {
    // Some logic.....
};

xhttp.open("POST", "URL to the API", true);
xhttp.setRequestHeader("Content-type", "application/json");
xhttp.send(dataToSend);

从服务器我得到 500 的原因是:

“TypeError:JSON 对象必须是 str,而不是 'dict'”

我尝试将 MIME 类型更改为“text/plain”、“text/html”和其他几个,但它只是将响应更改为:

TypeError:JSON 对象必须是 str,而不是 'NoneType'

后端的人说这个API很好用,用下面的python代码测试过

request_result = requests.post('API URL', json=request_data_jsn).json();

知道我该怎么做才能让它起作用吗?

【问题讨论】:

  • "下面的 python 代码"如果我们不知道确切地是什么request_data_jsn 是没有意义的。此外,如果您发送 json,“application/json”是正确的内容类型标头 - 但您在代码示例中发送的不是 json(json 是文本格式),它是一个 javascript 对象。
  • 关于 python 代码,抱歉,这就是我从他们那里得到的全部信息。关于对象,它实际上是有效的 JSON 字符串,它包含所有的引号。我也用jsonlint.com 验证它以确保它的格式正确
  • 关于您发送的内容不是正确的 json 的评论来自我在您实际编辑问题之前看到的内容 - 编辑后的版本似乎是正确的。 wrt/ python 方面,您必须向“后端人员”询问适当的完整示例,否则无法提供帮助。

标签: javascript python json api


【解决方案1】:

您必须将 dataToSend 转换为字符串。示例:使用 JSON.stringify

var xhttp = new XMLHttpRequest(),
    dataToSend = {"key":"value"}

xhttp.onreadystatechange = function(data) {
    console.log(data);
};

dataToSend = JSON.stringify(dataToSend);
xhttp.open("POST", "URL to the API", true)
xhttp.setRequestHeader("Content-type", "application/json")
xhttp.send(dataToSend);

【讨论】:

  • 对不起,我的问题写得不对,我确实这样做了(我刚刚编辑了我的问题)
  • 我试过你的代码:dataToSend = '{"key":"value"}'。这是成功。可以放python API代码吗?
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 2015-12-07
  • 2020-05-26
  • 1970-01-01
  • 2021-05-27
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多