我正在重构一个我用作自己学习工具的项目,这是一个 HTML5 Canvas 游戏,其中我有一个用 javascript 对象和 Canvas 构建的六 Angular 形图 block 网格。一切都存储在 javascript 对象结构中。
我正在努力学习更多关于 Python 的知识。我设置了一个基本的 Python Flask 路由,能够从 javascript 向 Flask 路由发送 AJAX 请求,能够提交到 Redis,能够从 Redis 检索......但我似乎无法弄清楚是什么我缺少将信息从 Python 传递回 javascript 对象的部分。
HTML:
<head>
<script type=text/javascript src="{{ url_for('static', filename='jquery-2.2.0.min.js') }}"></script>
</head>
<script type="text/javascript">
$(function() {
var data =
{
row: '3',
col: '3',
};
$('#sendBtn').click(function() {
$.ajax({
type: 'POST',
url: '/saveMap',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function(response) {
console.log(response.row)
},
error: function(error) {
console.log(error);
}
});
});
});
</script>
<body>
<button id="sendBtn" class="btn btn-lg btn-primary btn-block" type="button">Send</button>
</body>
</html>
python : 从 flask 导入 flask ,render_template,json,请求 导入redis
app = Flask(__name__)
r = redis.Redis("localhost")
@app.route("/")
def main():
return render_template('index.html')
@app.route('/saveMap',methods=['POST'])
def saveMap():
if request.method == "POST":
r.set("test", request.json)
result = r.get("test")
return result
if __name__ == "__main__":
app.run(debug=True)
因此,当单击 #sendBtn 时,请求通过,返回,在“网络”选项卡中显示为响应
{u'col': u'3', u'row': u'3'}
但在 AJAX 调用的成功部分,当我尝试调用 response.row 时,它会给我一个“未定义”。
我觉得我很亲近,我在这里错过了什么?
最佳答案
问题是 r.get("test")
返回一个 str
看起来 像字典。使用 jsonify
、pickle.dumps
和 pickle.loads
将解决您的问题。
from flask import Flask, render_template, request, jsonify
import redis, pickle
app = Flask(__name__)
r = redis.Redis("localhost")
@app.route("/")
def main():
return render_template('index.html')
@app.route('/saveMap',methods=['POST'])
def saveMap():
if request.method == "POST":
r.set("test", pickle.dumps(request.json))
result = pickle.loads(r.get("test"))
return jsonify(result)
if __name__ == "__main__":
app.run(debug=True)
编辑:从使用 eval
更改为使用 pickle
只是为了像 reptilicus 提到的那样安全
关于javascript - 将数据从 Javascript 往返传递到 Redis(通过 Python)并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579428/