我想通过ajax json格式发送变量的内容,并在python中恢复数据,但我仍然无法设法或发送或检索数据。
function deconnectmac(){
var essi = prompt("Please enter essi!!");
var tab = prompt("Please enter the tab!!");
var jsonObj = [];
var obj = {};
obj["tab"]=tab;
obj["essi"]=essi;
jsonObj.push(obj);
console.log(jsonObj);
$jsonObj=JSON.stringify(jsonObj);
if (tab != null) {
if(essi!= null){
$.ajax({
type: 'POST',
url: '/deconnect',
data:{ data: jsonObj },
dataType: 'text',
success: function(text) {
if (text === "success") {
alert("success");
} else {
alert(text);
}
},
error: function(error){
console.log(error);
}
});
}}
}
@APP.route('/deconnect',methods=['POST'])
def deconnect():
donne_request=json.loads(request)
print donne_request
return "success"
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/rik/serveur_externe/app/app.py", line 166, in deconnect_host
donne_request=json.loads(request)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
答案 0 :(得分:0)
request
不是您认为的那样。它属于flask.Request
类型。试试request.data
或request.get_json()
:
解析传入的JSON请求数据并将其返回。如果解析失败 请求对象上的on_json_loading_failed()方法将是 调用。默认情况下,此函数只会加载json数据 mimetype是application / json但是这可以被force覆盖 参数。
您还必须告诉服务器您正在发送json对象。在jquery Sending Data to the Server:
默认情况下,使用GET HTTP方法发送Ajax请求。如果 需要POST方法,可以通过设置a来指定方法 type选项的值。
你这样做了!
如果[使用[{1}}]形式的对象,则数据将转换为查询字符串 在发送之前使用jQuery.param()。这个处理可以 通过将processData设置为false来规避。处理可能是 如果您希望将XML对象发送到服务器,则不合需要;在这 case,更改contentType选项 application / x-www-form-urlencoded为更合适的MIME类型。
所以你可能想要这样做。 dataType实际上不是您要发送的数据类型,而是您期望的数据类型。有关更多信息,请阅读ajax的jquery文档。
此外,您目前正在尝试发送javascript对象。你要发送的是jsonformat中的字符串。使用:{ key1: "value1, ...}
有关详细信息,您还可以阅读处理类似问题的this stackoverflow question和another one。