Почему мой JSON не анализируется Усами? - PullRequest
2 голосов
/ 14 января 2012

Это действительно странно. Это мой первый раз с использованием библиотеки усов, и эти данные работают локально, когда я анализирую их как литерал необработанного объекта:

{
   "datacenters":[
      {
         "title":"Flinders St Station",
         "description":"This is a pretty major train station."
      },
      {
         "title":"Southern Cross Station",
         "description":"Did you know it used to be called Spencer St Station?"
      }
   ]
}

Вот шаблон усов, который я использую:

<script id="dinfoTpl" type="text/template"> 
    {{#datacenters}}
    <h1>{{title}}</h1>
    <p>{{description}}</p>
    {{/datacenters}}    
</script>

Но в тот момент, когда я заархивирую его в файл json и попытаюсь изменить его следующим образом:

<script type="text/javascript">

        var data, template, html;

        $.ajax({
            url: "datacenter.json",
            success: function(data) {
                var template = $('#dinfoTpl').html();
                var html = Mustache.to_html(template, data);
                $('#output').html(html);            
            }       
        });

</script>

Я получаю сообщение об ошибке:

Uncaught TypeError: <template>:2

 >>         {{#datacenters}}
            <h1>{{title}}</h1>
            <p>{{description}}</p>
            {{/datacenters}}    

Cannot use 'in' operator to search for 'datacenters' in {
   "datacenters":[
      {
         "title":"Flinders St Station",
         "description":"This is a pretty major train station."
      },
      {
         "title":"Southern Cross Station",
         "description":"Did you know it used to be called Spencer St Station?"
      }
   ]
}

Что я делаю не так?

Живой код здесь: http://bit.ly/A17pBP

1 Ответ

2 голосов
/ 14 января 2012

Вы забыли добавить "dataType: 'json'" к вашему вызову Ajax! Я добавил и протестировал его, и он отлично работает:

<script type="text/javascript">

        var data, template, html;

        $.ajax({
            url: "datacenter.json",
            dataType: 'json',
            success: function(data) {
                var template = $('#dinfoTpl').html();
                var html = Mustache.to_html(template, data);
                $('#output').html(html);            
            }       
        });

</script>
...