Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery将JSON数据发布到Python后端_Javascript_Jquery_Python_Json_Tornado - Fatal编程技术网

Javascript Jquery将JSON数据发布到Python后端

Javascript Jquery将JSON数据发布到Python后端,javascript,jquery,python,json,tornado,Javascript,Jquery,Python,Json,Tornado,我想将一些数据从jQuery发送到Tornado Python后端 下面是一个简单的例子: $.ajax({ url:“/submit\u net”, 数据类型:“json”, 数据:JSON.stringify({“test_1”:“1”,“test_2”:“2”}), 键入:“POST”, 成功:功能(响应){ 控制台日志(响应); }, 错误:函数(错误){ console.log(错误); } }); 以下是Python代码: class submit_net(tornado.web.

我想将一些数据从jQuery发送到Tornado Python后端

下面是一个简单的例子:

$.ajax({
url:“/submit\u net”,
数据类型:“json”,
数据:JSON.stringify({“test_1”:“1”,“test_2”:“2”}),
键入:“POST”,
成功:功能(响应){
控制台日志(响应);
},
错误:函数(错误){
console.log(错误);
}
});
以下是Python代码:

class submit_net(tornado.web.RequestHandler):
    def post(self):
        data_json = self.request.arguments
        print data_json
当我单击submit按钮时,Python后端将检索以下字典

{'{"test_1":"1","test_2":"2"}': ['']}
但我想检索与jQuery发送的字典完全相同的字典:

{"test_1":"1","test_2":"2"}

你能告诉我我做错了什么吗?

请求。参数应仅用于表单编码数据。用于访问JSON原始数据并使用以下命令进行解码:

request.body
包含字节,这在Python2中很好,但如果使用Python3,则需要首先将这些字节解码为Unicode。使用以下命令获取请求字符集:

这默认为UTF-8字符集,默认情况下仅对JSON请求有效;其他请求内容类型需要以不同的方式处理

您可能希望通过设置内容类型来明确发送的是JSON正文:

$.ajax({
url:“/submit\u net”,
contentType:“应用程序/json;字符集=utf-8”,
数据:JSON.stringify({“test_1”:“1”,“test_2”:“2”}),
键入:“POST”,
成功:功能(响应){
控制台日志(响应);
},
错误:函数(错误){
console.log(错误);
}
});
并在您的Tornado POST处理程序中验证正在使用该内容类型,然后再尝试将帖子解码为JSON:

content_type = self.request.headers.get('content-type', '')
content_type, params = parse_header(content_type)
if content_type.lower() != 'application/json':
    # return a 406 error; not the right content type
    # ...

charset = params.get('charset', 'UTF8')
data = json.loads(data_json.decode(charset))

只有当您将JSON从Python返回到jQuery时,才需要
$.ajax
数据类型
参数;它告诉jQuery为您解码响应。即使在那时,这也不是严格需要的,因为
应用程序/json
响应内容类型标题就足够了。

您是否尝试过不使用stringify?@Jai:不,那么他们就不会发送json了。这是接收端需要解决的问题。
from cgi import parse_header

content_type = self.request.headers.get('content-type', '')
content_type, params = parse_header(content_type)
charset = params.get('charset', 'UTF8')
data = json.loads(data_json.decode(charset))
content_type = self.request.headers.get('content-type', '')
content_type, params = parse_header(content_type)
if content_type.lower() != 'application/json':
    # return a 406 error; not the right content type
    # ...

charset = params.get('charset', 'UTF8')
data = json.loads(data_json.decode(charset))