Web2Py - 将AJAX响应呈现为HTML表格

时间:2015-07-23 00:36:00

标签: jquery html ajax web2py

我是Web2Py,Python堆栈的新手。我有一个简单的要求来实现。我需要将一些数据从UI表单传递给Controller操作进行处理。处理完该操作返回响应的数据后,我需要在同一视图上呈现为HTML表格。我正在为此目的使用AJAX。

我能够将响应返回到视图,但不知道如何迭代该响应的元素以呈现为HTML表。当我运行以下代码时,它所做的就是用响应内容替换整个目标DIV。

我知道它在Java,Grails,PHP等方面非常简单。但是,我很难在Web2Py中找到解决方法。

我的代码中包含以下代码段: 的index.html:

<script>
jQuery('#input_form').submit(function() {
    ajax('{{=URL('process_form')}}',
            ['input_var1','input_var2','input_var3','input_var4'], 'results_div');
    return false;
});

<div id="results_div">
    <form>
        <div class="table-responsive">
            <table id="records_table" class="table table-bordered">
                <tr>
                    <th>Col Head 1</th>
                    <th>Col Head 2</th>
                    <th>Col Head 3</th>
                    <th>Col Head 4</th>
                </tr>
                <tr>
                    <td>Col Content 11</td>
                    <td>Col Content 12</td>
                    <td>Col Content 13</td>
                    <td>Col Content 14</td>
                </tr>
                <tr>
                    <td>Col Content 21</td>
                    <td>Col Content 22</td>
                    <td>Col Content 23</td>
                    <td>Col Content 24</td>
                </tr>
            </table>
        </div>
    </form>
</div>

default.py

def process_form():
    results = request.vars
    return DIV(results)

非常感谢这方面的任何帮助。

1 个答案:

答案 0 :(得分:2)

默认情况下,Ajax函数需要接收HTML,它将放置在传入id的元素内。因此,最简单的方法是让process_form函数返回表的完整HTML ,因此results_div div的内容将替换为新表。您可以使用web2py HTML帮助程序在Python中构建HTML,也可以使用模板,就像使用任何其他控制器操作一样。例如:

def process_form():
    inputs = ['input1', 'input2', 'input3']
    html = DIV(TABLE(THEAD(TR(TH('Column 1'), TH('Column 2'), TH('Column 3')),
                           _class='test', _id=0),
                     TR([request.vars[input] for input in inputs]),
                     _id='records_table', _class='table table-bordered'),
               _class='table-responsive')
    return html

或者,您可以让process_form函数返回JSON数据。在这种情况下,您可以将ajax()的第三个参数设为Javascript函数,并将返回的JSON数据传递给该函数。然后,该函数可以使用新数据填充现有表。