【问题标题】:Get JSON from selected node (href value) in treeview从树视图中的选定节点(href 值)获取 JSON
【发布时间】:2011-12-06 16:19:15
【问题描述】:

我用一个包含 id 及其值的对象填充树视图,所以它看起来像这样:

var serializer = new JavaScriptSerializer();
var rslt = serializer.Serialize(new {
        Id = node.Id.ToString(),
        impactLength = node.impactLenght.ToString()
        });
TreeNode newNode = new TreeNode(node.Name, rslt);

我在从每个节点的 href 链接取回其对象时遇到问题:

以下是一些 href 的示例:

1.根

javascript:__doPostBack('ctl00$ContentPlaceHolder1$treeViewActions','s{\"Id\":\"0\",\"impactLength\":\"1\"}')

2.它的后裔

javascript:__doPostBack('ctl00$ContentPlaceHolder1$treeViewActions','s{\"Id\":\"0\",\"impactLength\":\"1\"}\\{\"Id\":\"2\",\"impactLength\":\"1\"}')

我成功检索到上面的href,只得到了对象字符串部分

{"Id":"0","impactLength":"1"}{"Id":"2","impactLength":"1"}{"Id":"7","impactLength":"1"} 

但是当我尝试用jQuery.parseJSON 解析它时,我得到一个异常: "Uncaught SyntaxError: Unexpected token {"

我做错了什么?

谢谢, 埃迪

【问题讨论】:

    标签: javascript jquery asp.net json treeview


    【解决方案1】:

    要一次处理它们,您需要将它们构建到 JSON 的数组表示法中。

    '[{"Id":"0","impactLength":"1"},{"Id":"2","impactLength":"1"},{"Id":"7","impactLength":"1"}]'
    

    事实上,它不是有效的 JSON 标记。您真的应该将来自服务器的数据作为正确的 JSON 发送。


    如果你不能在服务器端改变它,那么你可以试试这个,但不能保证:

       // assuming you have the part that you extracted stored in my_str...
    var my_str = '{"Id":"0","impactLength":"1"}{"Id":"2","impactLength":"1"}{"Id":"7","impactLength":"1"}'
    
       // ...try this
    var new_str = '[' + my_str.split( '}\\{' ).join( '},{' ) + ']';
    var result = jQuery.parseJSON( new_str );
    

    【讨论】:

    • 这是不可能的,因为每个单一对象都代表节点在其级别中的值。所以唯一的方法是检索,比如说最后一个对象,是从 href 字符串中删除它?
    • @EddieR:我想我的意思是你根本无法使用 JSON 方法解析无效的 JSON。如果服务器端无法更改格式,您可以尝试进行字符串操作以使其有效。因此,如果您有对象组,并且由于对象具有分隔符 `\`,您可以尝试使用逗号交换它们。我会更新的。
    • 您的回答对我帮助很大。将 '}\\{' 拆分为 '}{' 并成功运行。谢谢!
    • @EddieR:是的,我在看原版。很高兴它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多