关于jquery:使用AJAX将JSON数据传递给Flask服务器?

Passing JSON data to the Flask server using AJAX?

本问题已经有最佳答案,请猛点这里访问。

我在jquery中有一些由前端生成的数组。

Edit1(基于Edgar Henriquez的回答):

我的JQ.JS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a = ['one','two'];
var b = ['three','four'];
var c = ['five'];
var d = ['six','seven','eight'];
var e = ['nine','ten','eleven'];
var newArray = [];

//jsonify to send to the server
$.ajax('/output', {
    type:"POST",
    contentType:"application/json",
    dataType:"json",
    data: JSON.stringify(postData),
    success: function(data, status){
        console.log(newArray);
        console.log(status);}
 });

我将所选值传递给服务器(flask/python),让它计算笛卡尔积。然后我需要在output.html屏幕中显示输出

1
2
3
4
5
6
7
8
9
10
11
12
13
@app.route('/output', methods = ['GET','POST'])
def output():
    data1 = request.get_json(force = True)
    a = data1['a']
    b = data1['b']
    c = data1['c']
    d = data1['d']
    e = data1['e']
    newArray = [a,b,c,d,e]
for element in itertools.product(*newArray):
    print(element)
    return jsonify(element)
return render_template('output.html', element = element)

输出.html:

1
2
3
<p>
{{ element }}
</p>

编辑2:

使用此代码,/output.html生成:

1
2
"Bad Request
 Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)"

检查显示:

1
"Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)"

为什么它不认识它?


对于jquery代码,可以有一个javascript对象(将对象的属性命名为数组变量,只是为了约定)。像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var a = ['one','two'];
var b = ['three','four'];
var c = ['five'];
var d = ['six','seven','eight'];
var e = ['nine','ten','eleven'];

var postData = {
  a: a,
  b: b,
  c: c,
  d: d,
  e: e
}

$.ajax({
    url:"/output",
    type:"POST",
    contentType:"application/json",
    data: JSON.stringify(postData),
    success: function(data){/* do something */}
});

回到服务器中,您可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@app.route('/output', methods=['POST'])
def output():
    result = []
    data = request.get_json()
    a = data['a'] #will give you array a
    b = data['b'] #will give you array b
    c = data['c'] #will give you array c
    d = data['d'] #will give you array d
    e = data['e'] #will give you array e
    newArray = [a, b, c, d, e]
    #To test you got the data do a print statement

    print(newArray)

    # The for loop is not necessary if you pass the newArray directly to
    # your template"output.html".
    #
    #for element in newArray:
    #    result.append(element)
    #
    #like this
    return render_template('output.html', element=newArray)

你可以在你的output.html中显示结果,但是你认为最适合你,记住

希望有帮助!