我有一个烧瓶服务器,它将json格式化为字符串并返回它(仅用于测试目的),当我通过curl发送请求时,它会起作用:
curl -X POST -d data='{"username":"xyz","password":"xyz"}' http://localhost:5000/raw_query
但是当我尝试使用这个简单的jquery脚本时:
$.post("http://127.0.0.1:5000/raw_query", '{"username":"xyz","password":"xyz"}', function(data, textStatus) {
if(textStatus == 'success')
{
console.log(data)
}
else
{
console.log(textStatus)
}
});
我收到400错误请求错误:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
添加更多细节:这是执行请求的烧瓶代码:
@app.route('/raw_query', methods = ['POST'])
def raw_query():
data = json.loads(request.form['data'])
return jsonify(data)
我真的无法想到它可能的原因,但是我再次成为一个jq的新手,所以我可能会错过一些东西......任何帮助都会非常感激< / p>
答案 0 :(得分:1)
尝试改变你的代码,如下例所示(尚未测试过)。格式化data
(A plain object or string that is sent to the server with the request),例如:
$.post("http://localhost:5000/raw_query", {data:JSON.stringify({username:"xyz",password:"xyz"})}, function(data, textStatus) {
if(textStatus == 'success')
{
console.log(data)
}
else
{
console.log(textStatus)
}
});
答案 1 :(得分:0)
问题是您没有发送参数名称data
。您只是将JSON字符串作为原始参数发送,而不是data
POST参数的值。
$.post("http://127.0.0.1:5000/raw_query", {
data: '{"username":"xyz","password":"xyz"}'
}, function(data, textStatus) {
if(textStatus == 'success')
{
console.log(data)
}
else
{
console.log(textStatus)
}
});