我的应用程序接受来自POST方法的数据,我正在通过JQuery的AJAX请求运行POST方法。我发送的是JSON格式的数据,但在处理程序中,当我接受请求并访问数据时,结果是字节字符串类型
我正在使用my_body = self.request.body
方法
例如,如果我正在发送{"drzava":"rs","kategorija":"general"}
,则收到的数据看起来像b'drzava=rs&kategorija=general'
问题是,之后我不能用tornado.escape.json_decode()
来制作字典。我不断得到以下错误:
Traceback (most recent call last):
File "/home/stefan/.local/lib/python3.6/site-packages/tornado/web.py", line 1697, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "main.py", line 164, in post
telo_json = tornado.escape.json_decode(telo)
File "/home/stefan/.local/lib/python3.6/site-packages/tornado/escape.py", line 83, in json_decode
return json.loads(to_basestring(value))
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
如果需要,我会发布代码
更新:首先,我的
.js
文件中有一个输入错误,因此AJAX
请求没有被发送。其次,Tornado正在检测默认的POST
方法(而不是AJAX
的方法),因此您必须手动重写它,比如说e.preventDefault();
,其中e
是JQUERY
操作中匿名函数的参数。另一方面,在龙卷风中,self.request.body
的结果类似于b'{"country":"rs","category":"sports"}'
,可以使用tornado.escape.json_decode()
将其转换为字典。非常感谢@Ionut Ticus提出的建设性建议因此,经过一点调查和阅读文档,我发现:
这是龙卷风的官方文件。 Tornado Documentation Release 6.0.4 page 183
霍维沃,我找到了一个解决办法
您在Tornado服务器应用程序中接收的数据取决于客户端如何“打包”数据
您可以拥有
application/x-www-form-urlencoded
数据(似乎是您上面的情况),您可以使用get_body_argument
在Tornado中处理这些数据:或者您可以有
application/json
(似乎是您想要的):为了从浏览器发送JSON数据,您需要实际发送JSON数据,并指定内容类型:
编辑:
最后的问题是,HTML页面使用表单发送数据,实际上不会使用JS代码
相关问题 更多 >
编程相关推荐