【问题标题】:Performing ajax with Python Flask使用 Python Flask 执行 ajax
【发布时间】:2015-06-18 17:51:18
【问题描述】:

我正在尝试做一些简单但无法弄清楚的事情,因为没有使用脚本语言的经验,甚至在阅读了一些教程之后。在 link 中可以找到与我想做的最接近的匹配。

当有人单击以下链接时,我希望将 value 属性返回到我正在创建的此链接所在的同一模板,以便我可以将其用作数组的索引参数。

<a href="/disable?server={{count + loop.index0}}" 
id="serverCount" 
value="{{ count + loop.index0 }}">
Click this to Disable </a>

我拥有的 JavaScript/json/ajax 是:

{% block scripts %}
    {{ super() }}
    <script type=text/javascript>
$(function() {
  $('a#serverCount').bind('click', function() {
    $.getJSON('/disable', {
      a: document.getElementById("serverCount").getAttribute("value")
    }, function(data) {
      $("#result").text(data.result);
    });
    return false;
  });
});
    </script>
{% endblock %}

我相信有人会意识到我所拥有的肯定是行不通的。我只是发布我一直在试验的代码。

在 app.py 我有:

@app.route('/disable', methods=['GET', 'POST'])
def disableBtn():
    valueOfButton = request.args.get['serverCount']
    return jsonify(result = valueOfButton)

有人能解释一下正确的做法是什么吗?非常感激。

【问题讨论】:

    标签: javascript jquery python ajax flask


    【解决方案1】:

    既然您已经在使用 jQuery,为什么不采用简单的 jQuery 方法来获取值呢?

    $('#serverCount').val();
    

    所以通常当我进行 ajax 调用时,我期望返回 JSON 数据并将 JSON 发送到服务器。我会做这样的事情;

    $(function() {
        $('a#serverCount').bind('click', function() {
            $.ajax({
                method: "POST",
                url: "/url/to/your/server/method",
                dataType: 'json',
                data: { serverCount: $('#serverCount').val() }
                })
                .done(function(msgBackFromServer) {
                    alert("Data Sent to server" + msgBackFromServer);
                });
        });
    });
    

    现在您会注意到 url 需要是一种可以在您的服务器上被点击的方法,或者您拥有的某种类型或页面视图。我对 Flask 不熟悉,但我想它在某些方面类似于 Django。

    方法 POST 是因为您发送数据。在您的烧瓶服务器上,您应该能够接收 JSON 并将其解析为 Python 字典(或者可能还有其他一些烧瓶专用工具)。

    您对此视图的响应是传回 ajax 调用的 .done 函数的内容。这可以是您想要的任何数据。它将来自烧瓶。我确信烧瓶可以将它作为 JSON 对象发送回来,或者它可能只是一个字符串。如果它是 JSON 对象,您可以使用 .符号。类似 msgBackFromServer.title 或 msgBackFromServer.message 等...

    【讨论】:

    • 您能否详细说明一下脚本应该是什么样的以及 app.py 中的函数是什么样的。我以前从未使用过任何这些脚本语言,也不完全了解它们是如何联系在一起的。 @ChrisHawkes
    • 我更新了更多信息。不过我对烧瓶不是很熟悉。
    • 感谢您的回复。我会尝试找出如何让烧瓶侧工作。也谢谢你详细解释。信息量很大。
    【解决方案2】:

    这不是 AJAX。您似乎想要做的是使用 JINJA 编辑 javascript 并将 javascript 发送到客户端。不要这样做。相反,您的 javascript 文件应该是静态的,并且您应该从烧瓶应用程序请求数据本身。

    【讨论】:

    • 您的建议是把 JavaScript 放在 static 文件夹中,并在 jinja2 模板中扩展它?这样做不是问题,我是这样做的,因为我在开始这个项目时看到了一个教程。 @约翰
    • 我的建议是将视图元素与数据完全分离。 Jinja 是一个用于 HTML 诱惑的有用工具,比如放入警报或用户名或设置静态元素 - 请避免在 javascript 中使用它。您可以运行 AJAX 查询来更改状态和数据。 TBH,我很少使用 jinja,而是依靠客户端查询将元素或 div 添加到基本 html 页面
    猜你喜欢
    • 2016-09-30
    • 2013-12-10
    • 2019-04-23
    • 2016-10-28
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多