2013-04-08 6 views
1

Если это лишний вопрос, пожалуйста, сообщите мне и назовите меня там, но я не нахожу точной комбинации вопросов и ответов или смеси двух.PHP, Ajax, JSON и Handlebars

У меня есть ajax в jquery, который вызывает функцию с php-страницы. Без рулей данные 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> 
+0

Является ли я единственной обезьяной, которая пыталась это сделать? lol – tattooedgeek

ответ

2

От 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 уже является i-м элементом, если results является массивом. Возможно, вы можете уменьшить это до

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

Я уже пробовал это, просматривая страницу рулей, которую вы опубликовали, но не радость. Я снова попробовал, но снова без радости. Смешно без рулей, я могу отображать данные без проблем. Я просто хотел использовать более основанное на шаблонах решение. – tattooedgeek

+0

@tattooedgeek. Должно быть, проблема с самим шаблоном. Можете ли вы показать это в своем вопросе? –

+0

добавлен шаблон. – tattooedgeek

0

Хорошо, поэтому на самом деле здесь было несколько вещей.

Сначала у меня была опечатка в самой форме, хотя она не исправила проблему, которая бы заставила меня не найти исправление.

Во-вторых, не удалось использовать $ ('# submit'). On ("click", function()) по какой-то причине ему просто не понравилось. Я изменил его на $ ('# textbox) .on ("blur", function()) и сразу же начал получать результаты от функции успеха.

В-третьих, да, я не знаю, действительно ли это было проблемой, но это работает, поэтому я называю это частью ответа. Сделайте то, что @Olaf Dietsche с $ .each, примерно так:

$.each(results, function(i, context){ 
    $('div.entry').append(template(context)); 
}); 
Смежные вопросы