在AJAX调用中使用Handlebars渲染页面报错,请求语法排查
解决Handlebars在AJAX调用中渲染的报错问题
你好呀!从你描述的问题和给出的代码片段来看,大概率是这几个地方出了问题,我来帮你梳理下:
首先,最明显的问题:模板里的乱码
你提供的模板代码里有不少乱码内容(比如“scaffold口排Faith… Amy persisted英文 sequencing devise请temp(- UNEx连拍跨”),这些乱码会直接导致Handlebars无法正确解析模板,这是首要需要解决的问题,得先把这些无关的乱码清理掉,保证模板结构干净。
其次,检查Handlebars语法是否完整
从你的代码片段看,只写了{{#each this}},但没有对应的闭合标签{{/each}},Handlebars的块级标签必须成对出现,缺失闭合标签也会触发报错。
给你一个完整的正确示例
我整理了一套能正常运行的代码结构,你可以参考:
1. 页面中的模板和容器
<!-- 渲染结果的容器 --> <div id="get_art"></div> <!-- Handlebars模板,注意type是text/x-handlebars-template --> <script id="artists-template" type="text/x-handlebars-template"> <ul> {{#each this}} <li class="i"> <a class="i" href="{{url}}"> <img alt="{{name}}" src="{{image}}"> <span>{{name}}</span> </a> </li> {{/each}} </ul> </script>
2. AJAX调用+模板渲染的JS代码
这里用jQuery的AJAX为例,如果你用原生JS也可以对应调整:
// 先确保已经引入了Handlebars库和jQuery(如果用jQuery的话) // 发起AJAX请求获取数据 $.ajax({ url: '/your-api-url', // 替换成你的服务器接口地址 method: 'GET', dataType: 'json', success: function(artistsData) { // 1. 获取模板的HTML内容 var templateHtml = $('#artists-template').html(); // 2. 编译Handlebars模板 var compiledTemplate = Handlebars.compile(templateHtml); // 3. 用数据渲染模板,得到最终HTML var renderedHtml = compiledTemplate(artistsData); // 4. 将渲染结果插入到指定容器中 $('#get_art').html(renderedHtml); }, error: function(xhr, status, err) { // 错误处理,方便排查问题 console.log('AJAX请求失败:', err); console.log('请求状态:', status); } });
最后,还有几个需要检查的关键点
- 确认已经在页面中正确引入了Handlebars库(比如通过script标签引入CDN或者本地文件)
- 服务器返回的JSON数据结构要和模板里的变量对应:比如模板里用了
url、image、name,那返回的每个数据项里必须包含这几个字段 - 模板里的所有块级标签(比如
{{#each}}、{{#if}})都要记得闭合,不能只写开头不写结尾
内容的提问来源于stack exchange,提问作者Kokox
相关产品推荐
相关产品推荐

