0

我的 TreePanel 有一个讨厌的问题:我使用 TreeLoader 从 url 获取数据。在我的面板中正确呈现了示例树,因此问题应该出在自定义数据中。我通过一个 python cgi 获取我的数据,它逐步构建要写入的字符串。这是 TreePanel 代码:

var Tree = Ext.tree;

var tree = new Tree.TreePanel({
    useArrows: true,
    autoScroll: true,
    animate: true,
    enableDD: true,
    containerScroll: true,
    border: false,
    // auto create TreeLoader
    dataUrl: '../python/tree/get_tree',

    root: {
        nodeType: 'async',
        text: '369',
    }
});

python cgi写入的数据如下:

    [{
    id: 476,
    text: 'memShared',
    leaf: true
},{
    id: 477,
    text: 'icmpInParmProbs',
    leaf: true
},{
    id: 478,
    text: 'memTotalFree',
    leaf: true
},{
    id: 479,
    text: 'icmpOutEchos',
    leaf: true
},{
    id: 480,
    text: 'memAvailReal',
    leaf: true
},{
    id: 481,
    text: 'icmpInAddrMaskReps',
    leaf: true
},{
    id: 482,
    text: 'icmpInRedirects',
    leaf: true
},{
    id: 483,
    text: 'loadavg1',
    leaf: true
},{
    id: 484,
    text: 'tcpCurrEsta',
    leaf: true
},{
    id: 485,
    text: 'icmpInErrors',
    leaf: true
},{
    id: 486,
    text: 'icmpInMsgs',
    leaf: true
},{
    id: 498,
    text: 'icmpInTimeExcds',
    leaf: true
},{
    id: 499,
    text: 'tcpActiveOpens',
    leaf: true
},{
    id: 500,
    text: 'eCpuRawNice',
    leaf: true
},{
    id: 512,
    text: 'icmpOutTimeExcds',
    leaf: true
},{
    id: 513,
    text: 'icmpInEchos',
    leaf: true
},{
    id: 514,
    text: 'memBuffe',
    leaf: true
},{
    id: 515,
    text: 'icmpInSrcQuenchs',
    leaf: true
},{
    id: 516,
    text: 'icmpOutErrors',
    leaf: true
},{
    id: 517,
    text: 'tcpAttemptFails',
    leaf: true
},{
    id: 518,
    text: 'icmpOutAddrMaskReps',
    leaf: true
},{
    id: 519,
    text: 'tcpOutSegs',
    leaf: true
},{
    id: 520,
    text: 'loadavg15',
    leaf: true
},{
    id: 521,
    text: 'tcpRetransSegs',
    leaf: true
},{
    id: 522,
    text: 'tcpEstabResets',
    leaf: true
},{
    id: 523,
    text: 'icmpOutTimestamps',
    leaf: true
},{
    id: 524,
    text: 'memTotalReal',
    leaf: true
},{
    id: 525,
    text: 'icmpOutTimestmpReps',
    leaf: true
},{
    id: 526,
    text: 'icmpOutDestUnreachs',
    leaf: true
},{
    id: 527,
    text: 'tcpPassiveOpens',
    leaf: true
},{
    id: 528,
    text: 'memTotalSwap',
    leaf: true
},{
    id: 529,
    text: 'tcpInSegs',
    leaf: true
},{
    id: 530,
    text: 'icmpOutSrcQuenchs',
    leaf: true
},{
    id: 531,
    text: 'icmpInTimestampReps',
    leaf: true
},{
    id: 532,
    text: 'icmpOutEchoReps',
    leaf: true
},{
    id: 533,
    text: 'tcpOutRsts',
    leaf: true
},{
    id: 534,
    text: 'icmpInAddrMasks',
    leaf: true
},{
    id: 535,
    text: 'memSwapErro',
    leaf: true
},{
    id: 536,
    text: 'eCpuRawIdle',
    leaf: true
},{
    id: 537,
    text: 'eCpuRawKernel',
    leaf: true
},{
    id: 538,
    text: 'memAvailSwap',
    leaf: true
},{
    id: 539,
    text: 'tcpInErrors',
    leaf: true
},{
    id: 540,
    text: 'icmpOutAddrMasks',
    leaf: true
},{
    id: 541,
    text: 'icmpOutRedirects',
    leaf: true
},{
    id: 542,
    text: 'eCpuRawSystem',
    leaf: true
},{
    id: 543,
    text: 'eCpuRawInterrupt',
    leaf: true
},{
    id: 544,
    text: 'icmpOutMsgs',
    leaf: true
},{
    id: 545,
    text: 'icmpInTimestamps',
    leaf: true
},{
    id: 546,
    text: 'icmpInEchoReps',
    leaf: true
},{
    id: 547,
    text: 'eCpuRawWait',
    leaf: true
},{
    id: 548,
    text: 'eCpuRawUse',
    leaf: true
},{
    id: 549,
    text: 'memCached',
    leaf: true
},{
    id: 550,
    text: 'loadavg5',
    leaf: true
},{
    id: 551,
    text: 'icmpInDestUnreachs',
    leaf: true
},{
    id: 552,
    text: 'icmpOutParmProbs',
    leaf: true
},{
id: 501,
text: e,
children: [{
    id: 502,
    text: 'ifInOctets',
    leaf: true
},{
    id: 503,
    text: 'ifOutUcastPkts',
    leaf: true
},{
    id: 504,
    text: 'ifOutNUcastPkts',
    leaf: true
},{
    id: 505,
    text: 'ifInDiscards',
    leaf: true
},{
    id: 506,
    text: 'ifOutDiscards',
    leaf: true
},{
    id: 507,
    text: 'ifInErrors',
    leaf: true
},{
    id: 508,
    text: 'ifOutOctets',
    leaf: true
},{
    id: 509,
    text: 'ifOutErrors',
    leaf: true
},{
    id: 510,
    text: 'ifInUcastpkts',
    leaf: true
},{
    id: 511,
    text: 'ifInNUcastpkts',
    leaf: true
}]},{
    id: 487,
    text: 'dskIndex',
    children: [{
id: 488,
text: '('1',)',
children : [{
    id: 489,
    text: 'ns-dskUsed',
    leaf: true
},{
    id: 490,
    text: 'ns-dskPercent',
    leaf: true
},{
    id: 491,
    text: 'ns-dskAvail',
    leaf: true
},{
    id: 492,
    text: 'ns-dskTotal',
    leaf: true
}]},{
id: 493,
text: '('2',)',
children : [{
    id: 494,
    text: 'ns-dskUsed',
    leaf: true
},{
    id: 495,
    text: 'ns-dskPercent',
    leaf: true
},{
    id: 496,
    text: 'ns-dskAvail',
    leaf: true
},{
    id: 497,
    text: 'ns-dskTotal',
    leaf: true
}]}]}]

我不知道问题出在哪里,括号应该正确平衡并且萤火虫不会引发任何错误。这个字符串不是很好吗?还是有另一种方法使我的树形面板无法正常工作?非常感谢您提供的任何帮助!

4

2 回答 2

1

在您的数据上运行jsonlint 会显示此错误。修复它并再次运行代码。

Parse error on line 2:
[    {        id: 476,        tex
--------------^
Expecting 'STRING', '}
于 2011-08-24T16:25:32.180 回答
0

您是否注意到text: e,id 为 501 的部分节点?id: 488, text: '('1',)'和的问题相同id: 493, text: '('2',)',。这些字符串以不正确的格式传递。修复它们允许 ExtJS 构建一棵树(在本地尝试)。

您正在搜索的错误在eval语句中 - ExtJS 尝试在后台评估来自您的服务器的响应,但由于 json 格式不正确而未能做到这一点。

您可以在json.org阅读有关 json 格式的信息。

从 python 2.6 开始有一个 python json 编码器,你可以依赖它来生成 json。

于 2011-08-24T16:19:13.840 回答