You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Turn.js与AJAX集成问题:动态加载控制器JSON内容不完整

解决Turn.js动态加载AJAX内容的问题

我看你在使用Turn.js开发翻书功能时遇到了两个核心问题:一是AJAX返回的JSON内容只能显示最后一条,二是没有正确处理Turn.js的动态页面加载逻辑。下面我来帮你逐一解决:

问题1:内容被覆盖,只显示最后一条数据

你的循环里每次都用$('#Page-Loader').html(Html),这会覆盖掉之前所有内容,所以最后只会显示循环的最后一次结果。应该用.append()来累加内容,或者先构建完整的HTML字符串再一次性插入。

问题2:Turn.js的动态页面结构问题

Turn.js的翻书容器需要每个页面是一个独立的<div>元素,而且动态添加页面后需要调用turn('destroy')再重新初始化,或者用turn('addPage')方法添加新页面。另外你代码里的三元运算符逻辑写反了,比如(response[i].EnglishText != null ? response[i].EnglishText == null : "")应该改成正确的判断。

修改后的完整代码

<div class="sample-flipbook" id="BookViewer">
  <div id="book-js" class="text-center">
    <!-- 初始封面和封底 -->
    <div class="hard">
      <img src="~/Theme/OtherAssets/Images/temp-img.jpg" class="img-fluid" style="width:100%; height:100%">
    </div>
    <div class="hard"></div>
    <!-- 这里留空,后面动态添加内容页面 -->
    <div class="hard"></div>
  </div>
</div>

<script type="text/javascript">
$(document).ready(() => {
  initFlipbook();
});

// 封装翻书初始化函数,方便动态更新后重新调用
function initFlipbook() {
  $('#book-js').turn({
    width: 900,
    height: 600,
    autoCenter: true
  });
}

function LoadBook(HBID, ChapterNo, TableRef) {
  $.ajax({
    url: '@Url.Action("GetData", "Books")',
    type: "GET",
    data: { HadithBookID: HBID, ChapterNo: ChapterNo, TableRefNo: TableRef },
    success: (response) => {
      console.log(response.length);
      // 先清空之前的内容页面(保留初始的封面封底)
      $('#book-js div:not(.hard)').remove();

      // 循环构建每个页面
      for (var i = 0; i < response.length; i++) {
        // 修复三元运算符的逻辑错误
        const englishText = response[i].EnglishText ?? "";
        const language1Text = response[i].Language1 ?? "";

        // 构建单个页面的HTML
        const pageHtml = `
          <div class="book-page">
            <p class="urdu-font-fm container-fluid mt-3">${response[i].ArabicText}</p>
            <p class="container-fluid">${englishText}</p>
            <p class="urdu-font-fm container-fluid">${response[i].UrduText}</p>
            <p class="urdu-font-fm container-fluid">${language1Text}</p>
          </div>
        `;

        // 把页面添加到翻书容器的封底前面
        $('#book-js div.hard:last').before(pageHtml);
      }

      // 销毁旧的翻书实例,重新初始化
      $('#book-js').turn('destroy');
      initFlipbook();
    },
    error: (response) => {
      console.log(response);
    }
  });
}
</script>

关键改动说明

  • 修复逻辑错误:用??空值合并运算符替代错误的三元判断,简化代码同时保证逻辑正确。
  • 正确添加页面:把每个数据项作为独立的页面div插入到翻书容器中,保留初始的封面和封底。
  • 重新初始化翻书:动态添加页面后,销毁旧的Turn.js实例并重新初始化,确保新页面能被翻书组件识别。
  • 避免内容覆盖:不再使用.html()覆盖内容,而是逐个添加页面元素。

这样修改后,AJAX返回的所有JSON内容都会作为独立页面显示在翻书里,你可以正常翻页查看所有内容了。

内容的提问来源于stack exchange,提问作者Sohaib Azhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:07:52