代码之家  ›  专栏  ›  技术社区  ›  MGOwen

无法从WCF服务将JSON加载到jstree中(或者当jstree保持“正在加载…”时如何查找错误)

  •  -1
  • MGOwen  · 技术社区  · 15 年前

    我正在尝试让jStree(jQuery树控件)在我的ASP.NET(C#)页面中工作。我正在使用WCF服务返回JSON的测试字符串。

    在浏览器中打开WCF服务URL可以正常工作 -如果我转到URL(http://localhost/website/GetTree),我会得到JSON(看起来就像在浏览器中打开XML一样,语法突出显示和可折叠的制表符)

    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"attr": { "id": 2, "rel": "default" }, "data": "A node", "children": [ { "data": "Child 1", "attr": { "id": 43, "rel": "document" } }, {"data": "Child 2", "attr": { "id": 25, "rel": "document"} } ] }</string> 
    

    jstree本身工作正常 -如果我将同一个JSON放在文档中的“manually”中,则如下所示:

    "json_data": {
    "data":
    [{
    "attr": { "id": 2, "rel": "default" },
    "data": "A node",
    "children":
    [{
    "data": "Child 1", "attr": { "id": 43, "rel": "document" } 
    },{
    "data": "Child 2", "attr": { "id": 25, "rel": "document"}
    }]},{
    "attr": { "id": "li.node.id", "rel": "document" },
    "data": {
    "title": "Long format demo",
    "attr": { "href": "#" }
    }}]},
    

    我看到树上有那些节点。

    但是,将两者结合起来:

    "json_data": {
        "ajax": {
            "url": "GetTree",
            "data": function (n) {
                return {
                };
            }
        }
    },
    

    …失败了。jstree显示为 “正在加载…” 和一个动画加载gif。而且它 在WCF服务方法中命中一个断点(就像浏览它一样)。

    A:知道我哪里出了问题吗?

    B:一个主意 我是怎么发现的 怎么了?jstree文档没有帮助,我看不到任何错误消息。

    谢谢。

    更新:已解决

    感谢Mikael Eliasson指出我的服务必须返回XML而不是JSON。

    WCF服务代码:

    //                                this responseformat bit below fixed it
    [WebGet(UriTemplate = "GetTesto", ResponseFormat = WebMessageFormat.Json)]  
    [OperationContract]
    public Testo GetTesto()     
    {
        return new Testo();
    }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Mikael Eliasson    15 年前

    可能是个愚蠢的问题,但是您已经启用了json_数据插件,对吧?正如阿康苏所说,用Firebug这样的工具检查响应。

    在我看来,WCF服务返回的不是JSON,而是XML响应。我想那是你的问题。最好的方法可能是更改服务以返回JSON。如果不能这样做,可以添加success函数,并使用函数$.parseJSON()将字符串转换为JSON

    我希望这会有帮助。但是,您确实应该开始使用Firebug或类似的东西,因为有很多时候您需要检查响应或调试javascript。