阿贾克斯后到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。为什么服务器给我这个错误?
答
看来你没有发送适当的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
。
答
我不知道为什么,但是在methods=[]
中是"OPTIONS"
引起的问题。删除它,一切工作。
使用'request.get_json()' – T4rk1n
发送'profile_url'就是一个真正的json对象?...听起来像只是一个url ...也许你需要将它真正转换为json对象'{profileUrl: PROFILE_URL}'? –
在AJAX请求中添加了'JSON.stringify()'同样的问题 –