阿贾克斯后到Python服务器:没有JSON对象可以被解码

阿贾克斯后到Python服务器:没有JSON对象可以被解码

问题描述:

我收到此错误:阿贾克斯后到Python服务器:没有JSON对象可以被解码

ValueError: No JSON object could be decoded从服务器

这是从客户端

 function searchDB(profile_url) { 
      console.log(profile_url); 
      $.ajax({ 
       type: 'POST', 
       url:'http://127.0.0.1:5000/update_greenhouse', 
       data: JSON.stringify(profile_url), 
       contentType: "application/json" 
      }) 
     } 

服务器Ajax请求代码:

@app.route('/update_greenhouse', methods=['GET', 'POST', 'OPTIONS']) 
def update_gh(): 
    y = request.data 
    print(y) 
    json.loads(y) 

我将contentType设置为json。为什么服务器给我这个错误?

+0

使用'request.get_json()' – T4rk1n

+0

发送'profile_url'就是一个真正的json对象?...听起来像只是一个url ...也许你需要将它真正转换为json对象'{profileUrl: PROFILE_URL}'? –

+0

在AJAX请求中添加了'JSON.stringify()'同样的问题 –

看来你没有发送适当的JSON到服务器。只需设置contentType是不够的。您的数据(profile_url)需要正确编码为JSON对象。

尝试这样的事情在你的请求代码:

data: JSON.stringify({'url': profile_url}) 

你的服务器将获得一个基本的字典回用。如果你真的想传递一个字符串,你可以放弃服务器上的json.loads(),并且从request.data开始操作方向,但是为了构建超过hello世界应用的任何东西,我强烈建议使用像JSON这样更结构化的格式。

您还需要为每个Flask请求返回响应(或错误)。如果你正在构建一个基于JSON的API,我建议使用Flask的jsonify。一些东西沿线

return flask.jsonify({'status': 'updated'}) 

成功,可能与任何更新状态的细节。如果有错误,你应该返回用正确的错误代码的响应,如下所示:

return flask.make_response(jsonify({'error': 'Error details'}), 418) 

与任何适当的HTTP error code可更换418

+0

没有'JSON.stringify()'这样做? –

+0

您需要传递实际的JSON对象。 – robmathers

+0

是不是一个有效的json对象的字符串? –

我不知道为什么,但是在methods=[]中是"OPTIONS"引起的问题。删除它,一切工作。