Jquery Handlebar模板呈现无内容的html

Jquery Handlebar模板呈现无内容的html,jquery,json,ajax,handlebars.js,Jquery,Json,Ajax,Handlebars.js,主文件: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title

主文件:

    <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Teacher</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <link href="https://fonts.googleapis.com/css?family=Lato:700" rel="stylesheet">
  <link rel="stylesheet" href="/css/users.css" >
</head>
<body>
  <div class="wrapper">
    <!-- Page Header -->
    <div class="header">
      <button type="button" class="btn btn-default toggle">
        <span class="glyphicon glyphicon-menu-hamburger"></span>
      </button>

      <div class="btn-group pull-right">
        <button type="button" class="btn btn-default">
          <span class="glyphicon glyphicon-cog"></span>
          Settings
        </button>
        <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          <span class="caret"></span>
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul class="dropdown-menu">
          <li><a href="#"><b>{{name}}</b></a></li>
          <li role="separator" class="divider"></li>
          <li class="logout"><a href="/sign-in">Logout</a></li>
        </ul>
      </div>
    </div>

    <!-- Left Navbar -->
    <div class="sidebar">
      <ul class="nav">
        <li><a href="/teacher"><i class="glyphicon glyphicon-lock"></i><span>&emsp;Course Management</span></a></li>
        <li><a href="/teacher/createCourse"><i class="glyphicon glyphicon-film"></i><span>&emsp;Create Course</span></a></li>
      </ul>
    </div>

    <div class="content">
      <div class="container-fluid">
          {{{ body }}}
      </div>
    </div>

  </div>


  <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  {{{_sections.handlebars}}}
  {{{_sections.script}}}
  <script src="/js/teacher.js"></script>
</body>
</html>
我试图通过ajax读取json文件并显示在主文件上,但页面仅显示div,而不显示文本coursecode和coursename

我想要什么

我得到的是:


Handerbar可以处理数组本身。每个不需要使用$。只需使用{{each}{{/each}呈现所有数组

已经修改了您的代码,并且工作正常。你可以在你的手机上测试。我使用了本地json数组来呈现。您只需对它进行注释并取消对$.get函数的注释,如果您的get函数数据是给定格式的数组,那么它将非常有效

代码如下所示

   <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Teacher</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css?family=Lato:700" rel="stylesheet">
    <link rel="stylesheet" href="/css/users.css">
</head>

<body>
    <div class="wrapper">
        <!-- Page Header -->
        <div class="header">
            <button type="button" class="btn btn-default toggle">
                <span class="glyphicon glyphicon-menu-hamburger"></span>
            </button>
            <div class="btn-group pull-right">
                <button type="button" class="btn btn-default">
                    <span class="glyphicon glyphicon-cog"></span> Settings
                </button>
                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    <span class="caret"></span>
                    <span class="sr-only">Toggle Dropdown</span>
                </button>
                <ul class="dropdown-menu">
                    <li><a href="#"><b>{{name}}</b></a></li>
                    <li role="separator" class="divider"></li>
                    <li class="logout"><a href="/sign-in">Logout</a></li>
                </ul>
            </div>
        </div>
        <!-- Left Navbar -->
        <div class="sidebar">
            <ul class="nav">
                <li><a href="/teacher"><i class="glyphicon glyphicon-lock"></i><span>&emsp;Course Management</span></a></li>
                <li><a href="/teacher/createCourse"><i class="glyphicon glyphicon-film"></i><span>&emsp;Create Course</span></a></li>
            </ul>
        </div>
        <div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-md-7">
                        <h1>Manage Courses</h1>
                        <div class="courses"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="static/js/handlebars-v4.0.5.js"></script>
    <script type="application/javascript">
    $(function() {


    /* for local use only  to test */
        var data = [
        {
          "coursecode": "ELEC 101",
          "coursename": "Introduction to Electrical engineering"
        },
        {
          "coursecode": "SYSC 102",
          "coursename": "Object-Oriented Programming"
        },
        {
          "coursecode": "ELEC 301",
          "coursename": "Electronics I"
        },
        {
          "coursecode": "SYSC 402",
          "coursename": "Real-Time Systems"
        },
        {
          "coursecode": "BUSI 101",
          "coursename": "Introduction to Business Models"
        },
        {
          "coursecode": "ECON 102",
          "coursename": "Economic paradigms"
        }
    ];
        let source = $('#course-template').html();
        let template = Handlebars.compile(source);
        let placeHolder = $('.courses');

        var html = template(data);
        placeHolder.append(html);

    /* test code ends here */

 /* uncomment below code and comment test code */

        // $.get("/json/courses.json", function(data, status, xhr) {
            // let source = $('#course-template').html();
            // let template = Handlebars.compile(source);
            // let placeHolder = $('.courses');

            // var html = template(data);
            // placeHolder.append(html);
        // });
    });
    </script>
    <script id="course-template" type="text/x-handlebars-template">
        <div class="panel panel-default">
            {{#each this }}
                <div class="panel-heading">{{coursecode}}</div>
                <div class="panel-body">
                    <a href="">{{coursename}}</a>
                </div>
            {{/each }}
        </div>
    </script>
</body>

</html>

谢谢,我已经修好了
 [
        {
          "coursecode": "ELEC 101",
          "coursename": "Introduction to Electrical engineering"
        },
        {
          "coursecode": "SYSC 102",
          "coursename": "Object-Oriented Programming"
        },
        {
          "coursecode": "ELEC 301",
          "coursename": "Electronics I"
        },
        {
          "coursecode": "SYSC 402",
          "coursename": "Real-Time Systems"
        },
        {
          "coursecode": "BUSI 101",
          "coursename": "Introduction to Business Models"
        },
        {
          "coursecode": "ECON 102",
          "coursename": "Economic paradigms"
        }
    ]
   <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Teacher</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css?family=Lato:700" rel="stylesheet">
    <link rel="stylesheet" href="/css/users.css">
</head>

<body>
    <div class="wrapper">
        <!-- Page Header -->
        <div class="header">
            <button type="button" class="btn btn-default toggle">
                <span class="glyphicon glyphicon-menu-hamburger"></span>
            </button>
            <div class="btn-group pull-right">
                <button type="button" class="btn btn-default">
                    <span class="glyphicon glyphicon-cog"></span> Settings
                </button>
                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    <span class="caret"></span>
                    <span class="sr-only">Toggle Dropdown</span>
                </button>
                <ul class="dropdown-menu">
                    <li><a href="#"><b>{{name}}</b></a></li>
                    <li role="separator" class="divider"></li>
                    <li class="logout"><a href="/sign-in">Logout</a></li>
                </ul>
            </div>
        </div>
        <!-- Left Navbar -->
        <div class="sidebar">
            <ul class="nav">
                <li><a href="/teacher"><i class="glyphicon glyphicon-lock"></i><span>&emsp;Course Management</span></a></li>
                <li><a href="/teacher/createCourse"><i class="glyphicon glyphicon-film"></i><span>&emsp;Create Course</span></a></li>
            </ul>
        </div>
        <div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-md-7">
                        <h1>Manage Courses</h1>
                        <div class="courses"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="static/js/handlebars-v4.0.5.js"></script>
    <script type="application/javascript">
    $(function() {


    /* for local use only  to test */
        var data = [
        {
          "coursecode": "ELEC 101",
          "coursename": "Introduction to Electrical engineering"
        },
        {
          "coursecode": "SYSC 102",
          "coursename": "Object-Oriented Programming"
        },
        {
          "coursecode": "ELEC 301",
          "coursename": "Electronics I"
        },
        {
          "coursecode": "SYSC 402",
          "coursename": "Real-Time Systems"
        },
        {
          "coursecode": "BUSI 101",
          "coursename": "Introduction to Business Models"
        },
        {
          "coursecode": "ECON 102",
          "coursename": "Economic paradigms"
        }
    ];
        let source = $('#course-template').html();
        let template = Handlebars.compile(source);
        let placeHolder = $('.courses');

        var html = template(data);
        placeHolder.append(html);

    /* test code ends here */

 /* uncomment below code and comment test code */

        // $.get("/json/courses.json", function(data, status, xhr) {
            // let source = $('#course-template').html();
            // let template = Handlebars.compile(source);
            // let placeHolder = $('.courses');

            // var html = template(data);
            // placeHolder.append(html);
        // });
    });
    </script>
    <script id="course-template" type="text/x-handlebars-template">
        <div class="panel panel-default">
            {{#each this }}
                <div class="panel-heading">{{coursecode}}</div>
                <div class="panel-body">
                    <a href="">{{coursename}}</a>
                </div>
            {{/each }}
        </div>
    </script>
</body>

</html>