简体   繁体   English

使用 JQuery 和 Flask 的动态下拉不起作用

[英]Dynamic drop down using JQuery and Flask not working

Hi I am writing a small app using Flask.嗨,我正在使用 Flask 编写一个小应用程序。 I have to update drop down menu based on output from database.我必须根据数据库的输出更新下拉菜单。 I am not able to add options dynamically.我无法动态添加选项。

Javascript code: Javascript代码:

<script type="text/javascript">
   function filldata(){
      var sample = document.getElementById("filter-select").value;
      jQuery.support.cors = true;
      $.post("/test",{"filter_type":sample},function(data,status){
          var tmp = data.output;
          alert(tmp.length);
          var sel = document.getElementById('further-select');
          for(var i =0;i<tmp.length;i++){
             console.log(tmp[i]);
             alert("<option>"+tmp[i]+"</option>");
             var opt = document.createElement('option');
             opt.innerHTML = tmp[i];
             opt.value = tmp[i];
             sel.appendChild(opt);
           }
      });
   }
</script>

Server Code:服务器代码:

@app.route('/test',methods=['POST'])
def test():
    tmp = request.form.get('filter_type')
    con = mdb.connect('localhost', 'root', 'root', 'sample')
    cur = con.cursor()
    cur.execute("SELECT DISTINCT "+tmp+" FROM logdata")
    res = cur.fetchall()
    con.close()
    return jsonify(output=res)

May I know where I am going wrong?我可以知道我哪里出错了吗? Thank you.谢谢你。

Edit:编辑:

I have included HTML code.我已经包含了 HTML 代码。

HTML: HTML:

<div class="collapse navbar-collapse navbar-ex1-collapse">
                <ul class="nav navbar-nav side-nav">
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#ts"><i class="fa fa-fw fa-dashboard"></i> Time Period <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="ts" class="collapse">
                            <select id="time-stamp">
                                <option value="Till now">Till Now</option>
                                <option value="Yesterday">Yesterday</option>
                                <option value="Last Week">Last Week</option>
                                <option value="Last Month">Last Month</option>
                                <option value="Last 6 months">Last 6 months</option>
                                <option value="Customize">Customize</option>
                            </select>
                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#ns"><i class="fa fa-fw fa-arrows-v"></i> Select Nodes <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="ns" class="collapse">
                            <select id="nodes-select" multiple="multiple">
                                <option value="Till now">Till Now</option>
                                <option value="Yesterday">Yesterday</option>
                                <option value="Last Week">Last Week</option>
                                <option value="Last Month">Last Month</option>
                                <option value="Last 6 months">Last 6 months</option>
                                <option value="Customize">Customize</option>
                            </select>
                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#fs"><i class="fa fa-fw fa-arrows-v"></i> Select Filter <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="fs" class="collapse">
                            <select id="filter-select" onchange="filldata()">
                                <option value="mac">MAC</option>
                                <option value="sublbl">SUBLBL</option>
                                <option value="vrf">VRF</option>
                                <option value="ifhndl">IFHNDL</option>
                                <option value="compid">COMP_ID</option>
                                <option value="v4addr">V4_ADDR</option>
                                <option value="v6addr">V6_ADDR</option>
                            </select>
                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#ff"><i class="fa fa-fw fa-arrows-v"></i> Select items <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="ff" class="collapse">
                            <select id="further-select" multiple="multiple" >

                            </select>

                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#cs"><i class="fa fa-fw fa-bar-chart-o"></i> Charts <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="cs" class="collapse">
                            <select id="chart-select">
                                <option value="error_info">Error Info</option>
                                <option value="session_history">Session History</option>

                            </select>
                        </ul>
                    </li>

                </ul>
            </div>

You wrote a Javascript function and never called it.您编写了一个 Javascript 函数,但从未调用过它。 You should place the code inside a $document.ready() of some sort.您应该将代码放在某种类型的 $document.ready() 中。

Here's a more general answer.这是一个更一般的答案。 I'm posting it here because this question is most closely related and likely to come up in searches.我在这里发布它是因为这个问题最密切相关并且可能会出现在搜索中。

In my case jQuery showed as loaded but refused to fire because (ultimately I realised that) I had my jQuery inside a script block that was being imported earlier than the jQuery cdn:在我的情况下,jQuery 显示为已加载但拒绝触发,因为(最终我意识到)我将 jQuery 放在一个脚本块中,该脚本块比 jQuery cdn 更早导入:

base.html基本文件

<body>
    <div>Stuff on page...</div>

    {% block scripts %} {% endblock %} <!-- pulling scripts in from a child template -->
    <script src="https://jquery.example.com"></script>

</body>

and once I changed them round it worked perfectly.一旦我改变了它们,它就完美地工作了。

<body>
    <div>Stuff on page...</div>

    <script src="https://jquery.example.com"></script>
    {% block scripts %} {% endblock %}

</body>

Sometimes the solution is so simple that nobody bothers to post it anywhere, and then people like me get utterly stuck.有时解决方案是如此简单,以至于没有人费心将其张贴在任何地方,然后像我这样的人就完全陷入困境。 So here it is, in the hope that it saves someone else the hours I lost.所以就在这里,希望它可以为其他人节省我失去的时间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM