【问题标题】:PHP, Ajax, JSON, and HandlebarsPHP、Ajax、JSON 和 Handlebars
【发布时间】:2013-04-10 03:04:38
【问题描述】:

如果这是一个多余的问题,请让我知道并指出我那里,但我没有找到确切的问题/答案组合,也没有找到两者的混合。

我在 jquery 中有一些从 php 页面调用函数的 ajax。如果没有车把,json 数据会很好地返回。那里没有问题。但是,我似乎无法让 ajax 将我的结果写入车把模板。这是我现在拥有的代码:

$.ajax({
type: "post",
    url: "../includes/db_functions.inc.php",
    data: ({ p : p, p2 : p2, f : f }),
    dataType: "json",
    success: function(results){
$.each(results, function(i, item){
     var context = [ 
     {
            id : item[i].id, 
            clock_number : item[i].clock_number,
     }
    ],
    template = Handlebars.compile( $('#template').html() );
    $('table.entries').append( template(context) );
});
}
});

有人知道我在这里可能缺少什么吗?我 99% 确定它在上下文区域中,但只是没有找到它。

[编辑]

<table class="entries">
    <script id="template" type="text/x-handlebars-template">
            <tr>
                <td>{{id}}</td>
                <td>{{clock_number}}</td>
            </tr>
    </script>
</table>

【问题讨论】:

  • 我是唯一一个尝试这样做的猴子吗?大声笑

标签: php jquery ajax json handlebars.js


【解决方案1】:

Handlebars - Getting Started,我想说,省略数组,只使用对象作为上下文

var context = {
    id : item[i].id, 
    clock_number : item[i].clock_number,
},
template = Handlebars.compile($('#template').html());
$('table.entries').append(template(context));

在 ajax success 代码中,有对 $.each(results, function(i, item) {...}) 的调用。在这种情况下,item 已经是 ith 元素,如果 results 是一个数组。也许您可以将其简化为

success: function(results) {
    var template = Handlebars.compile($('#template').html());
    $.each(results, function(i, context) {
        $('table.entries').append(template(context));
    });
}

【讨论】:

  • 我之前尝试过,浏览了您发布的车把页面,但没有任何乐趣。我确实又试了一次,但又没有高兴。没有把手很有趣,我可以毫无问题地显示数据。我只是想使用更多基于模板的解决方案。
  • @tattooedeek 那肯定是模板本身有问题。你能在你的问题中展示它吗?
  • @tattooedgeek 我刚刚使用context 作为数组(不起作用)和context 作为对象(起作用)测试了模板。不幸的是,当我尝试保存时,jsfiddle.net 显示禁止,所以我现在无法显示它。
  • 谢谢奥拉夫,很有趣。那我就继续修吧。感谢您的帮助。
【解决方案2】:

好的,这里实际上有几件事是错误的。

首先我在表单本身中有一个错字,虽然它没有解决问题会导致我找不到解决方法。

其次,不能使用 $('#submit').on("click", function()) 出于某种原因它只是不喜欢它。我将其更改为 $('#textbox).on("blur", function()) 并立即开始从成功函数中获取结果。

第三,是的,我不知道这是否真的是一个问题,但它确实有效,所以我称它为答案的一部分。用 $.each 做@Olaf Dietsche 的操作,如下所示:

$.each(results, function(i, context){
   $('div.entry').append( template(context) );
});

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2012-04-05
    • 2013-01-07
    • 2012-10-20
    相关资源
    最近更新 更多