前端点击事件中用ajax的POST方法传给后端views一个值,后端用request为post的方法接收这个数据,并进行处理,请问之后如何再返回到前端并取到这个数据?

我的前端树形tree菜单的点击事件中用ajax的POST方法传给后端views一个值(选中的节点nodeIds),后端用request为post的方法接收这个数据,并进行了处理,请问之后如何再返回到前端并取到这个数据?(在同一个路由下,request.method=='POST'外已经成功return render_template('display.html',titles=titles)了)

img


这个是前端sub按钮的点击事件,用ajax把nodeIds(选中的节点id)传到后端display路由。

img

img


这两张是后端display路由,判断如果是post方法则接收nodeIds,处理后得到display_data,return jsonify display_data,是可以成功打印出来的。否则render_template('display.html',titles=titles)),titles是tree的data。

img


这是前端同一个页面显示display_data。

1.我不知道后端路由如何返回display_data,应该是return jsonify(display_data)还是render_template('display.html',display_data=display_data))
2.我不知道前端如何接收这个display_data,应该是{{display_data}}还是用ajax接收。
求解答,困扰了我一周了

框架用的是flask?


对于第一个问题

使用jsonify即可

这里你的需求是返回json数据所以使用jsonify即可,如果使用render_template('display.html',display_data=display_data)),理论上应该也行,
但一般习惯性用法不是这样使用,如下所示

from flask import Flask, render_template, request, redirect, jsonify

app = Flask(__name__)

@app.route("/")
def home():
    return render_template("login.html", title="Metalworks Login")

@app.route("/dashboard")
def dashboard():
    return render_template("dashboard.html", title="Metalworks Login")


@app.route("/login", methods = ["POST"])
def login():
    if "username" not in request.form or len(request.form["username"]) == 0: return jsonify({"success":False, "error":"Username is not specified!"})
    if "password" not in request.form or len(request.form["password"]) == 0: return jsonify({"success":False, "error":"Password is not specified!"})

    username = request.form["username"]
    password = request.form["password"]
    account = {"username": "admin", "password": "admin"}
    if account["username"] != username or account["password"] != password:
        return jsonify({"success":False, "error":"Incorrect password!"})

    return redirect("/dashboard")

app.run(debug=True)

一般post方法获取数据的返回结果是这样的,使用json.dumps或者jsonify将处理好的dict比如这个demo中的rt转为json格式进行传输,

所以你在return语句之前,使用json.dumps或者jsonify裹一下就可以了。

import json
@app.route('/json', methods=['POST'])
def my_json():  
    print request.headers
    print request.json
    rt = {'info':'hello '+request.json['name']}
    return Response(json.dumps(rt),  mimetype='application/json')

@app.route('/hello/<name>/<words>',methods=['GET'])
def hello(name,words):
    return jsonify({'name':name,'words':words})#也可以传入key=value形式的参数,如jsonify(name=name,words=words)

————————————————

参考链接:


在flask中使用jsonify和json.dumps的区别_Jenrey的博客-CSDN博客 flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象,那么在flask的视图函数中return它们会有什么不同之处呢?想必开始很多人和我一样搞不清楚,只知道既然框架提供了方法就用,肯定不会错。但作为开发人员,我们需要弄清楚开发过程中各种实现方式的特点和区别,这样在我们面对不同的需求时才能做出相对合理的选择,而... https://blog.csdn.net/JENREY/article/details/86509593

对于第二个问题
一般ajax的post demo如下,res即为返回结果,

所以,你在

 success(res){
            console.log(res); // 这个就是你post之后的返回结果,也就是你flask处理后传过来的内容
           //在这里书写你的代码,获取到数据后想要怎么做        
}

这个返回结果的函数里面,书写你想要写的代码就可以了,res即为你想要的返回结果,
然后在这个后面继续书写你的代码逻辑就可以了

 $.ajax({
        type:'GET'/'POST',
        url:url,
        async:true,
        dataType:'json',
        success(res){
            console.log(res); // 这个就是你post之后的返回结果,也就是你flask处理后传过来的内容
// 书写你的代码逻辑
        }
    })

参考:


如有问题及时沟通

后端将处理结果写入response,前端ajax就能获取到结果了

你不能ajax和页面模板使用同一个,要分开,ajax写一个接口,页面模板是一个,两个分开写,互不影响。