Jquery发送一个带有帖子的json

时间:2016-06-14 20:45:02

标签: jquery json

我有一个烧瓶服务器,它将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>

2 个答案:

答案 0 :(得分:1)

尝试改变你的代码,如下例所示(尚未测试过)。格式化dataA 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)
    }
});