gpt4 book ai didi

c# - .net 中的 jquery+jstree - web 服务响应格式?

转载 作者:太空狗 更新时间:2023-10-30 01:10:47 25 4
gpt4 key购买 nike

我第一次使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com