javascript
  • json
  • dojo
  • assign
  • 2011-06-15 135 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

    相關問題