我使用ajax在我的jsTree中加载XML flat tree,所以声明看起来像这样(它工作正常):
$("#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设置的属性,而不是创建一个全新的树对象?
答案 0 :(得分:2)
flag = 0; function getData() { return '{"longnames":"' + flag + '"}'; } $("#jstree").jstree({ "xml_data": { "ajax": { cache: false, data: getData() } } }); $("#jstree").jstree("refresh"); //refresh with flag = 0 flag = 1; $("#jstree").jstree("refresh"); //refresh with flag = 1
答案 1 :(得分:0)
应删除“data:getData”的括号 或者,jQuery将执行getData()并仅保留第一次执行的结果。 如果没有括号,jQuery会将“data”的值作为函数进行交换,并且每次都运行它。 顺便说一句,要注意“cache:false”,jQuery会发布“_”cacheBurster。