javascript - 将数据从 Javascript 往返传递到 Redis(通过 Python)并返回?

标签 javascript python ajax flask redis

我正在重构一个我用作自己学习工具的项目,这是一个 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 看起来 像字典。使用 jsonifypickle.dumpspickle.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/

相关文章:

javascript - 如何停止广度优先搜索递归函数

python - 谷歌应用引擎 yaml index.html

python - 从 Pandas 数据框列中查找所有正则表达式匹配项

python - 在 Python 中,如何检查字符串是否只包含某些字符?

mysql - 使用 AJAX 更新数据库

javascript - Ajax 从具有特定 ID 的远程文件加载数据

javascript - 使用 javascript 将 href 中的所有特定术语更改为另一个特定术语

javascript - jQuery 推迟了 : Nesting promises in methods, 最后一次回调太早

javascript - 如何在此 JSON 文件中引用此数据?

javascript - 将 JSON 字符串发布到 JSP 时出现意外标记