- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我第一次使用 c#.net 玩 jstree (1.0rc2)+jquery (1.4.2) 虽然我已经让它工作了,但有几件事我不明白数据是如何工作的由我用来填充树的 web 服务提供给树(使用 ajax 和 json_data 插件)。我希望有更多使用 jstree 经验的人可以提供一些见解。
jstree 配置如下所示:
"json_data": {
"ajax": {
"url": "GetTree.asmx/GetChildren",
"type": "POST",
"contentType": "application/json; charset=utf-8",
"dataType": "json",
"data": function(n) {
var result = "{'id':'" + (n.attr ? n.attr("id").replace("node_", "") : "0") + "'}";
return (result);
}
}
}
GetTree.asmx GetChildren 方法:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml )]
public string GetChildren(string id)
{
List<jsTreeNode> jsTree = new List<jsTreeNode>();
//... (build the tree as needed)
JavaScriptSerializer serializer = new JavaScriptSerializer();
return(serializer.Serialize(jsTree));
}
问题 1:那么一切正常,那么问题是什么?问题是“ResponseFormat = ResponseFormat.Xml”。我努力了一段时间才让它工作,因为当它设置为 ResponseFormat.Json 时它不起作用,这正是我所期望的。在这种情况下,Web 服务或 jQuery 在解析 json 响应时不会报告任何错误,但树会呈现为空。
在查看 Web 服务的 HTML 输出时,我看不出两种方式呈现的内容有什么区别。我希望有人可以解释为什么这有效(违反直觉)以及为什么它不适用于 ResponseFormat.Json,如果这表明其他事情我可能做错了。
问题 2:通常是网络服务还是网络处理程序?
无论如何,使用通用网络处理程序 (ashx) 是否是一种更有效的方式?标准 Web 服务与通用 Web 处理程序所需的开销是否存在实质性差异?由于我的目标基本上是准确控制输出的内容(并且在 Web 服务中使用 json 数据格式似乎并没有按照我想要的方式工作)我不确定有什么好处,如果有的话,在这里使用网络服务而不是完全剥离它。另一方面,这现在起作用了,所以也许我应该把 well 留给自己。
最佳答案
看到这个问题有近 600 次浏览,但没有答案,我想我会自己回答(因为我早就想通了)。
使用 ScriptMethod
确实不是与 jQuery ajax 通信的正确方法。虽然可以做到,但您会注意到我在上面所做的是返回一个 string
。使用我自己编码为 JSON 的数据 JavascriptSerializer.
但是,使用 ScriptMethod
自动合并旨在与 Microsoft 的 AJAX 框架进行通信的序列化/反序列化。由于序列化一个没有对象包装器的纯字符串通常会产生相同的字符串(无论我返回的是 XML 还是 JSON 格式),它基本上可以工作,但内部真正发生的是它被序列化了两次 .
所以我至少应该做的是:
public List<jsTreeNode> GetChildren(string id)
即返回类型应该是实际的数据类型,而不是一串序列化后的数据。
然而,这仍然不是完全正确的,因为微软的方法将返回值包装在一个对象中 d
.我仍然可以在 Javascript 中提取它以获取内部数据。但是,如果像 jsTree 这样的东西需要预定义格式的数据,这可能行不通。
最好的解决方案是不使用 Web 服务,而是使用通用处理程序 (ashx)。这使您可以完全控制输入和输出的格式和处理。为自己设置一个漂亮的框架可能需要做一些工作,但是无法跳过不需要的 WebService 处理部分的挫败感使它非常值得。
关于c# - .net 中的 jquery+jstree - web 服务响应格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969235/
我试图在不重新加载或刷新页面的情况下重新加载 jstree,重新加载应该发生在按钮的 onclick 上,因此当单击按钮时我调用 $("#tree-container").jstree('destro
在我的页面上,我有一个按钮,单击该按钮会刷新该页面上找到的 jstree。 现在,当 jstree 加载时,将从 2D 数组中读取数据,并根据该数组中找到的数据更改节点图标。我需要一个函数来刷新或重
我正在尝试使用 jstree 并在打开页面时打开一个节点及其所有父节点。这是我用来测试的html代码。 TEST1
有没有人尝试过使用类型插件更改 jstree 特定节点的颜色?而且我还想避免该节点上的点击事件。 我需要这样做以防止用户选择相同的节点。 最佳答案 关于如何更改任何被点击节点的颜色的示例: $(fun
我将 jsTree 与复选框插件一起使用。我将级联设置为“向下”。这很好用,除了当我想加载包含已选中和未选中节点的数据时,级联会覆盖节点的“状态”设置。例如。 var data = [ {"i
为了在jsTree中存储任意数据节点,我将自定义属性(例如 node-data)传递给 create_node方法。但我需要在单个属性中存储多条数据。 (例如姓名、年龄等)哪种格式最适合节点数据属性的
有没有办法以编程方式关闭 jsTree 中的上下文菜单?我实现了一种使用 show_contextmenu 在悬停时打开上下文菜单的方法,但我需要在鼠标离开时关闭它 最佳答案 好的,通过查看代码我找到
当还选择了父节点时,我在选择子节点时遇到了困难,还想打开子文件夹并选择所有子节点(不确定我是否说清楚)所以我知道如何通过以下方式获取所有子节点: selected_nodes = $("#demo")
我需要显示一个 JSTree 但不能展开和折叠。有什么办法可以实现吗? 在下面的链接中提到禁用展开和折叠在 jstree 中不可用,这似乎是一个错误。 https://groups.google.co
如何在 jsTree 1.0 中禁用移动,但不禁用 dnd 插件? 谢谢。 最佳答案 我找到了解决方案。 $("#tree").jstree({ //... "crrm" : {
我的 jstree 配置如下: var $proceduresTree = $('#procedures-tree'); $proceduresTree.jstree({ 'core' : {
我使用插件 Jstree 绘制文件夹和文件树。 我想获取顶部的文件夹列表,然后获取文件列表(文件夹和文件列表必须按字母顺序排序)。 这是我的树初始化函数: $('#jstree_demo_div').
这是我处理这个问题的最后手段。 问题是我无法从下面的示例数据中获取具体值。 我很着急,如果您能回答这个问题,我将不胜感激。 这是我的代码。 $("#organize").jstree( {
在我的网站中,我有一个下拉选择选项,列出了 MySQL 中可用的数据库。在每个数据库中,我都有一个名为树的表。每当选择选项更改为新数据库或发生页面重新加载时,我都会将数据库名称发布到 php 文件中。
我正在使用 jstree 并且 select_node.jstree 不会触发,这是代码 $(document).ready(function () { //$("#MySplitter").spli
要将节点添加到我的树中,我使用 JavaScript 推送: var parent1 = { "id": "parent1", "data": {extra:"some extra d
如何获取jsTree中的所有节点? 我正在用 xml 构建 jsTree Root -----A -----A1 -----A1.1
如果我没记错的话,当使用 jstree 时,如果检查了父节点,那么它的子节点也会被检查。像这样 我正在做的是,我正在进行 ajax 调用并仅加载父节点。我检查了父节点,当我展开父节点时,我正在进行另一
是否可以为 jsTree jQuery plugin/library 生成的类名添加前缀?如果没有,是否有已知的路径可以让单个页面共享两个样式不同的 jsTree 元素? 问题: 我有一个(基于 PH
我的 jsTree 包含在树加载时设置的 html 数据(请参阅下面的 javascript)。这工作正常。但是,我希望能够根据某些用户操作在 Ajax 请求中重新加载整个树。我基本上需要重新加载从
我是一名优秀的程序员,十分优秀!