如何通过ajax json格式发送变量以及如何在python flask中接收这些数据

时间:2015-04-18 19:08:47

标签: jquery python ajax json flask

我想通过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

1 个答案:

答案 0 :(得分:0)

request不是您认为的那样。它属于flask.Request类型。试试request.datarequest.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 questionanother one