更改jstree中的AJAX选项并从服务器重新加载树

我正在使用ajax在我的jsTree中加载XML平面树,所以声明看起来像这样(它工作正常):

$("#jstree").jstree({ "xml_data": { // "data": $xmlFlatData, "ajax": { type: "POST", async: true, "url": loc + "/AjaxReturnTree", data: '{"longnames":"'+flag+'"}', contentType: "application/json; charset=utf-8", dataType: "json", cache: false, success: function (msg) { var mm = eval('(' + msg + ')'); ; // create object to get rid of json return mm.d; }, error: function () { // TODO process error } }, "xsl": "flat", "override_ui": "true", "real_checkboxes": "true" }, "plugins": ["xml_data", "themes", "checkbox", "ui"] }); 

现在我需要重新加载树并将“longnames”部分更改为另一个标志(它是0/1),但保持其他选项不变。

我想尝试使用这样的东西:

  $("#jstree").jstree({ "xml_data": { "ajax": { cache: false, data: '{"longnames":"' + flag + '"}' } } }); $("#jstree").jstree("refresh"); 

但它不会触发新的AJAX请求,只会刷新屏幕上的树而不重新加载。

如何从服务器重新加载树?

另外,我如何确定我更改旧的ajax设置的属性,而不是创建一个全新的树对象?

     flag = 0;

     function getData(){
         return'{“longnames”:“'+ flag +'”}';
     }

     $( “#jstree”)。jstree({
         “xml_data”:{
             “ajax”:{
                 cache:false,
                 data:getData()
             }
         }
     });

     $( “#jstree”)jstree( “刷新”)。  //刷新标志= 0

     flag = 1;
     $( “#jstree”)jstree( “刷新”)。  //刷新标志= 1

应删除“data:getData”的括号或者,jQuery将执行getData()并仅保留第一次执行的结果。 如果没有括号,jQuery会将“data”的值作为函数进行交换,并且每次都运行它。 顺便说一句,要注意“cache:false”,jQuery会发布“_”cacheBurster。