【问题标题】:dynamicly fill table using zpt and ajax as update使用 zpt 和 ajax 作为更新动态填充表
【发布时间】:2013-05-08 20:24:48
【问题描述】:

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

【问题讨论】:

  • AJAX 是一种浏览器端技术。您将使用 JavaScript 构建表格,而不是使用 ZPT。 ZPT 在服务器端运行,并且在浏览器加载结果时已经完成。
  • 所以不可能使用 ajax 调用用新数据重新加载页面?是的,我确实如此,但我只是在与专业人士核实。谢谢你的答案。
  • 您也可以使用 AJAX 重新加载页面,并使用 ZPT 构建该响应服务器端。但与其他回复相比,这并没有什么特别之处。
  • 我认为除了使用 javascript 等之外,这将是唯一的方法。感谢您抽出宝贵时间 Martijn,一如既往地为您提供了很大的帮助 :)

标签: ajax pyramid zope chameleon template-tal


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

【讨论】:

  • 这正是我们在上述 cmets 中得出的结论。但感谢您以比评论更体面的方式指出这一点。
  • 我想尽可能使用 zpt,但我认为这不可能,所以我只是在检查。我将使用 ajax 调用 json 并以这种方式更新我的表。
  • @GertV:如果服务器返回一个用 zpt 呈现的 HTML 片段,那么使用 zpt 生成额外的行并使用 ajax 调用将它们附加到表中是很有可能的,正如我在答案中的第二个选项。
  • 是的,我明白这一点。但在我们的例子中,这在很大程度上意味着刷新整个页面,因为该页面仅包含 1 个带有输入的表。当我添加项目时,可能需要将另一个页面上的更改添加到表中。这意味着我必须添加一些其他逻辑来保持当前输入不变,并在更新后再次插入它们。我想我会选择 json,因为它更容易跟踪页面内部和服务器上所做的更改。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2014-08-26
  • 2015-05-26
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
相关资源
最近更新 更多