javascript
  • json
  • dojo
  • assign
  • 2011-06-15 132 views 0 likes 
    0

    我正在使用来自JSON的值填充Dojo组合框下拉菜单。下面 代码工作得很好(在线JSON).....将外部JSON分配给变量

    <script> 
    var magicvars = { 
        identifier: 'name', 
        label: 'name', 
        items: [ 
        {name: "ZCCN_NO_1", label: "<img width='16px' height='16px' src='http://localhost:3000/static/images/eight_ball_16x16.png'/>ACCN_NO_1"}, 
        {name: "CR_Local_ID", label:"<img width='16px' height='16px' src='http://localhost:3000/static/images/eight_ball_16x16.png'/>CR_Local_ID"} 
    ]}; 
    </script> 
    
    <div dojoType="dojo.data.ItemFileReadStore" data="magicvars" jsId="xvarStore2"></div> 
    

    然而,当我指定一个外部文件的JSON,不走,这是说,下拉填充。 外部文件standard.txt,看起来像这样...

    { 
        identifier: 'name', 
        label: 'name', 
        items: [ 
        {name: "ZCCN_NO_1", label: "<img width='16px' height='16px' src='http://localhost:3000/static/images/eight_ball_16x16.png'/>ACCN_NO_1"}, 
        {name: "CR_Local_ID", label:"<img width='16px' height='16px' src='http://localhost:3000/static/images/eight_ball_16x16.png'/>CR_Local_ID"} 
    ]}; 
    

    我的HTML调用道场的看起来像这样..

    <div dojoType="dojo.data.ItemFileReadStore" jsId="xvarStore2" url="http://localhost:3000/static/standard.txt"> 
    </div> 
    

    内嵌工作正常,但外部调用没有。道歉,如果这是一个补救问题,但我如何读取外部文件并将其分配给“magicvars”。我只是不想用一堆内联JSON混淆HTML。

    任何意见表示赞赏。 Janie

    +0

    请参阅下面答案中的注释。你的JSON文件中的结尾分号是什么给你的错误,而不是未加引号的属性名称。当然,应该引用适当的JSON - Dojo内部讨论/辩论是否将xhr调用转换为使用JSON.parse - 因此,未引号的属性名称可能在2.0版本中不再有效。 – 2011-06-17 01:56:20

    回答

    1

    这不是有效的JSON,所以不会用大多数JSON.parse实现进行解析。尝试引用键名并删除尾随分号。

    在Chrome,

    JSON.parse('{ a: "b" }') 
    

    产生

    SyntaxError: Unexpected token ILLEGAL 
    

    一样

    JSON.parse('{ a: "b" };') 
    

    但有效的JSON(注意周围"a"引号)

    JSON.parse('{ "a": "b" }') 
    

    返回预期结果。

    +0

    BAM!这就是答案!迈克你是最棒的,非常感谢你! J.W. – 2011-06-15 20:02:20

    +0

    这很奇怪,因为ItemFileReadStore使用'dojo.xhrGet'来获取URL内容,然后将它传递给'dojo.fromJson'来解析。 'dojo.fromJson'实际上做了'eval'而不是'JSON.parse'。所以没有引号的属性也应该工作......尽管从来没有尝试过。 – 2011-06-16 09:19:28

    +1

    @Stephen,在'{a:foo}'中'a'是一个标签,就像在{{a:for(...){... break a; }}。所以'dojo.fromJson'可能会将输入封装在圆括号中以强制'eval'将其视为表达式。 '({a:foo};)'由于分号既不是有效的语句也不是有效的表达式。某些使用'eval'的JSON解析器也会使用一堆正则表达式技巧来通过JSON来阻止XSS。这些也可能导致了错误。 – 2011-06-16 18:14:44

    0

    尝试将您的文件重命名为standard.json

    我的猜测是dojo正在以纯文本字符串读取文件,因此不解析JSON。 (正如在其他答案中指出的那样,不是有效)

    +0

    没有。 ItemFileReadStore使用'dojo.xhrGet'来获取URL,默认为“json-comment-optional”类型。文本总是*被解析为JSON。 – 2011-06-16 09:17:49

    相关问题