【问题标题】:How to close webview and get json response in flask?如何关闭 webview 并在烧瓶中获取 json 响应?
【发布时间】:2021-01-22 12:02:50
【问题描述】:

单击提交按钮后,我想在收到响应后关闭我的 selectGroupView。目前我没有得到任何响应,因为每当我点击提交按钮时,我的 selectGroupView 就会突然关闭。

其实我想在提交表单后返回一个json数据。以便我可以进一步使用它。 请帮帮我。

app.py

from flask import Flask, request,render_template

@app.route('/select-group/<string:assignerID>',methods=['GET'])
def selectGroupView(assignerID):
    assignerInfo = info.assignerInfo(assignerID,[])
        
    assignerID = assignerInfo['id']
    assignerName = assignerInfo['name']
    assignerGroups = assignerInfo['groups']

    return render_template('groups.html',groups = assignerGroups, assignerID = assignerID, assignerName=assignerName)

@app.route('/setup-group',methods=['POST'])
def setupGroupView():

    assignerID = request.form.get('assignerID')
    assignerName = request.form.get("assignerName")

    selectedGroup = request.form.get("group")
    selectedGroupID,selectedGroupName = selectedGroup.split(",")
    
    bot.sendTextMessage(assignerID,f'*{selectedGroupName}* Group Selected Successfully.')
    bot.sendTextMessage(assignerID,f'Please Wait')

    return '<h1>'I want to return Json'<h1>',200

groups.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Select Group</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='styles/style.css') }}">
</head>
<script>
    (function(d, s, id){
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement(s); js.id = id;
            js.src = "//connect.facebook.net/en_US/messenger.Extensions.js";
            fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'Messenger'));
    
    function handleSaveBtn(){
            MessengerExtensions.requestCloseBrowser(function success() {
          // webview closed
        }, function error(err) {
            console.log(err);
          // an error occurred
        });
        }

</script>
<body>
    <div class='head'>
        <img src="{{ url_for('static',filename='Image/logo.webp') }}" alt="Italian Trulli">
    </div>

    <div class="form">
        <form method="POST" action="/setup-group">
            <input type="text" hidden name="assignerID" id="psid" value="{{assignerID}}">
            <input type="text" hidden name="assignerName" id="psname" value="{{assignerName}}">
            {% for i in groups %}
            <input type="radio" id="{{i.group_name}}" name="group" value="{{i.group_id}},{{i.group_name}}">
            <label for="{{i.group_name}}"><b>{{i.group_name}}</b></label><br><br>
            {% endfor %}
        </br>
            <button type="submit" onclick="handleSaveBtn()">Save</button>
          </form>
    </div>
    
</body>
</html>

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    我相信您的问题可能与您如何配置请求流程和关闭 web 视图有关。

    您的发帖请求

    <form method="POST" action="/setup-group">
    

    发送到/setup-group 端点;相关函数将处理请求并返回您需要的 JSON 响应。我在这里没有发现任何问题。

    对于处理关闭 Web 视图的 onClick 函数可能会干扰并可能导致您的问题。

    <button type="submit" onclick="handleSaveBtn()">Save</button>
    

    很可能在收到 JSON 响应之前,您的 web 视图已关闭,从而使后端返回的任何响应无效。您可以尝试在 JavsScript 函数中添加 sleep 调用来延迟关闭,也可以配置回调以等待收到响应后再关闭 webview - 请参阅example here

    【讨论】:

    • 我做不到。你能给我一个示例代码吗?
    • 我这个周末很忙,不能这样做。我建议您使用答案中提供的方法在 Google 上搜索。
    • @BhaveshMevada 除了问题中提供的示例之外,我认为this 是一个很好的资源,用于演示使用 ajax 请求。这将确保您在尝试关闭 web 视图之前先返回响应 - 我建议使用这种方法。
    • 不知道,因为 JavaScript 知识差
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2021-12-22
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多