使用zpt和ajax作为更新动态填充表

时间:2013-05-14 13:55:06

标签: ajax pyramid zope chameleon template-tal

我正在金字塔中创建一个webproject,我想在每隔几个小时更新一个表。我已经决定使用ajax,但我仍然坚持使用。

在客户端,我使用以下代码:

    function update()
    {
    var variable = 'variable ';
    $.ajax({
        type: "POST",
        url: "/diagnose_voorstel_get_data/${DosierID}",
        dataType: "text",
        data: variable ,
        success: function (msg) {
        alert(JSON.stringify(msg));           
        },
        error: function(){
            alert(msg + 'error');
          }                      
        });
    }

金字塔方面:

@view_config(route_name='diagnose_voorstel_get_data', xhr=True, renderer='string')    
def diagnose_voorstel_get_data(request):
    dosierid = request.matchdict['dosierid']
    dosieridsplit = dosierid.split     
    Diagnoses = DBSession.query(Diagnose).filter(and_(Diagnose.code_arg == str(dosieridsplit[0]), Diagnose.year_registr == str(dosieridsplit[1]), Diagnose.period_registr == str(dosieridsplit[2]), Diagnose.staynum == str(dosieridsplit[3]), Diagnose.order_spec == str(dosieridsplit[4])))       
    return {'Diagnoses ' : Diagnoses }

现在我想使用tal:repeat语句将此数据放入zpt表中。 我知道如何在页面加载时将这些数据放在表中,但我不知道如何将它与ajax结合起来。

anny1可以帮我解决这个问题吗?谢谢你。

1 个答案:

答案 0 :(得分:1)

你可以用AJAX做任何事情,你的意思是“没有可能性”?一旦你清楚地看到什么运行在哪里以及以什么顺序运行,事情变得更加清洁 - 正如Martijn Pieters所指出的那样,浏览器中没有ZPT并且服务器上没有AJAX,所以问题的标题没有多大意义。

有些选项是:

  • clent发送一个AJAX请求,服务器执行其服务器端的东西,在AJAX调用成功处理程序中,客户端使用window.location.search='ts=' + some_timestamp_to_invalidate_cache之类的东西重新加载整个页面。整个页面将重新加载新数据 - 虽然它的工作方式几乎与普通表单提交完全一样,但使用AJAX却没有多大意义。

  • 客户端发送一个AJAX请求,服务器返回一个用ZPT呈现的HTML 片段,然后客户端在AJAX成功处理程序中附加到页面上的某个元素:

    function update()
    {
        var variable = 'variable ';
        $.post("/diagnose_voorstel_get_data/${DosierID}")
           .done(function (data) {'
               $('#mytable tbody').append(data);
          });
    }
    
  • 客户端发送一个AJAX请求,服务器返回一个JSON对象,然后使用其中一个客户端模板引擎在客户端上呈现该对象。这可能只有在客户端上呈现整个应用程序并且服务器以JSON提供所有数据时才有意义。