Jquery 使用Ajax/JSON不调用URL的jsTree搜索
我非常感谢您在以下方面给予我帮助: 我有一个通过URL加载JSON数据的jsTree。所有数据都已预加载 我需要做的是更改搜索功能,根据用户输入通过AJAX使用新的JSON数据重新加载整个树(因为我需要在后端执行更复杂的节点搜索) 首先,我要做的就是让jsTree代码调用我的URL。我从最初加载树时使用的URL开始 然而——这是我找不到解决方案的问题——虽然成功调用URL以首先加载树,但当我键入一些搜索文本并单击“搜索”时,jsTree使用其正常的内部搜索来突出显示节点,但我提供的URL再也不会被调用 HTML是Jquery 使用Ajax/JSON不调用URL的jsTree搜索,jquery,ajax,json,jstree,Jquery,Ajax,Json,Jstree,我非常感谢您在以下方面给予我帮助: 我有一个通过URL加载JSON数据的jsTree。所有数据都已预加载 我需要做的是更改搜索功能,根据用户输入通过AJAX使用新的JSON数据重新加载整个树(因为我需要在后端执行更复杂的节点搜索) 首先,我要做的就是让jsTree代码调用我的URL。我从最初加载树时使用的URL开始 然而——这是我找不到解决方案的问题——虽然成功调用URL以首先加载树,但当我键入一些搜索文本并单击“搜索”时,jsTree使用其正常的内部搜索来突出显示节点,但我提供的URL再也不会
<div>
<form>
<div>
<input id="treeSearchText" type="text" />
<button id="searchTree" class="btn">Search</button>
<button id="clearSearch" class="btn">Clear</button>
</div>
</form>
</div>
<div id="myJsTree" style="height: 100%;"></div>
我真的很感激任何帮助
谢谢。你最终得到解决方案了吗 我现在也在做同样的事情,
search
插件选项的ajax
部分的行为就像jqueryajax选项一样,我指定了type:“POST”
,一个success
函数和数据类型:“JSON”
,而我的success函数则在控制台中记录结果
(不是世界上最好的手册),对于每个匹配的搜索结果,您需要指定指向它的路径,而不包括匹配的节点ID。然后jsTree将加载您提供的路径,并且内置的高亮显示将匹配文本。例如,如果搜索匹配的条目位于#secondchild
节点(向下3级),则您需要将其传递给jsTree,以便它在搜索中加载该结果:
Array[ '#rootnode', '#firstchild', '#secondchild' ]
这将使用您已经指定的标准数据检索方法加载这三个节点,如果它们在DOM中还不存在的话。通过硬编码您要查找的路径,对JSON结果进行一些测试,看看它是如何工作的
注意:如果在Ajax请求中定义了success
方法,则需要返回方法中获得的数据对象,这将允许jsTree解析它并执行它的操作。在我的例子中,我有console.log(data)
,但它什么也没做,因为我事后没有返回数据
编辑
我解决了我的问题,不再返回包含每个匹配元素路径的多个数组,而是需要返回一个包含唯一的节点ID的单级数组,搜索插件按预期对其进行解析,并在执行客户端搜索之前加载新的数组
请参见此处了解我的解释:您最终得到解决方案了吗?我现在也在做同样的事情,
search
插件选项的ajax
部分的行为就像jqueryajax选项一样,我指定了type:“POST”
,一个success
函数和数据类型:“JSON”
,我的success函数成功地将结果记录在我的控制台中。下一步,如何刷新树以包含原始结果中不存在的返回节点…我从未找到解决此特定问题的方法。最后我不得不解决这个问题。我所做的是:更改搜索框的功能,使其接受搜索条件并用它重新初始化整个树。然后,我向每个匹配的结果(在服务器端)添加了一个虚拟不可见标志,然后,在重新显示树之后,我重写了jsTree搜索功能,以始终使用该虚拟标志高亮显示节点。不是最优雅的,但它工作得非常好。请参阅上面关于我实现了什么解决方案来解决此错误的评论。很好,我将把此解决方案留给将来有相同问题的其他人。
$("#searchTree").click(function() {
$("#myJsTree").jstree("search", $("#treeSearchText").val());
return false;
});
Array[ '#rootnode', '#firstchild', '#secondchild' ]