1

我正在金字塔中创建一个网络项目,我想每隔几秒更新一次表格。我已经决定使用 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 可以帮我解决这个问题吗?非常感谢。

4

1 回答 1

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 形式提供所有数据时才有意义。

于 2013-05-14T19:38:07.377 回答