我的前端树形tree菜单的点击事件中用ajax的POST方法传给后端views一个值(选中的节点nodeIds),后端用request为post的方法接收这个数据,并进行了处理,请问之后如何再返回到前端并取到这个数据?(在同一个路由下,request.method=='POST'外已经成功return render_template('display.html',titles=titles)了)
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)
————————————————
对于第二个问题
一般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写一个接口,页面模板是一个,两个分开写,互不影响。