在 AJAX 调用中重新加载数据时丢失格式

Losing formatting on reload of data on AJAX call

当我使用 AJAX 调用中的数据重新加载 jstree 时遇到问题。所以在加载时它工作正常,但是添加数据并得到响应树失去了它的结构

初始 html 为空 div,使用 ajax

单击按钮时更新数据
<div id="pnlTree">                  

  <div id="jstree" style="text-align: left">

  </div>
</div>

success: function (data) 
        {
            if( data )
            {
                    var output = '<ul class="appointmentlist">';
                    $.each(data, function(key, val){

                        output += "<li id='"+data[key].data1+"' name='dtpurchase'"+counter+"' value='" + data[key].data2 + "'>" +dtdata + "</li>";
                        //output += '<a id="dtappointment" name="dtpurchase" value="' + data[key].data3 + '"'+ '>'+data[key].purchase_date + '</a>';
                         //output += '</li>';
                         counter++;

                    });
                    output += '</ul>';
                $('#jstree').html(output);
            }

        },

我试过刷新、重新加载,但似乎无法解决问题。

Soooo 你需要做的是 refresh() 更新数据后的树。 现在这仅在您将日期附加到带有 $("#jstree").jstree(true).settings.core.data = output 的元素时才有效。如果你使用 $('#jstree').html(output) 则它不起作用

运行 片段以查看实际效果:

工作:

$('#jstree').jstree()

function update() {
  var output = `<ul><li>New Item</li></ul>`
  $("#jstree").jstree(true).settings.core.data = output
  $('#jstree').jstree(true).refresh();
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>

<div id="jstree">
  <ul>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
  </ul>
</div>

<button onclick="update()">Update data</button>

好的,第二个正在使用 AJAX。它在 Stack Overflow 沙箱中不起作用,但它在普通 HTML 页面上起作用(参见屏幕截图)。这是完全相同的概念,您只需按正确的顺序应用它:

$('#jstree').jstree()

function update() {
  $.ajax({
    url: "https://swapi.dev/api/people/1", 
    success: function(data){
      var output = `<ul>
        <li>${data.name}</li>
        <li>${data.eye_color}</li>
        <li>${data.height}</li>
      </ul>`
      $("#jstree").jstree(true).settings.core.data = output
      $('#jstree').jstree(true).refresh();
    }
  });
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>

<div id="jstree">
  <ul>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
  </ul>
</div>

<button onclick="update()">Update data</button>