2012-12-12 48 views
0

我有一個這樣的Java對象有幾個具有在其中基本字段對象字段的內部的jquery嵌套JSON(由GSON製備),在這裏是一個例子:訪問使用地圖

Template { 
    String name; 
    EmailMessage defaultEmailMessage; 
} 
EmailMessage { 
    String emailSubject; 
    String emailBody; 
} 

我有一個使用gson以json格式返回模板列表的spring控制器方法。

在我的jsp我使用jQuery的AJAX調用來獲取這個列表,然後填充基於它的一些html內容,這裏是一個縮短版:

$.ajax({ 
    type : "GET", 
    url : '<c:url value="/listTemplates.htm"/>', 
    dataType: 'json', 
    success : function(templates) { 
    var map = $.map(templates, function(template) { 
     return { 
      "name": template.name, 
      "emailSubject": template.defaultEmailMessage.emailSubject 
    };}); 
     $("#thumbnails-ul").html($("#campaignThumbTmpl").tmpl(map)); 
    }, 
    error : function(data) { 
     alert(data.responseText); 
    } 
}); 

在Firebug我看到錯誤undefined template.defaultEmailMessage但是當我調試我可以對template.defaultEmailMessagetemplate.defaultEmailMessage.emailSubject進行蒸發。我嘗試使用$.each但同樣的問題。我如何訪問嵌套的json?如果你想在瀏覽器中看到json的完整輸出,請告訴我。

回答

1

替換您"emailSubject": template.defaultEmailMessage.emailSubject"emailSubject": template.defaultEmailMessage

以後添加: 要再次進行數據轉換成JSON,爲什麼呢?你正在請求數據爲json,並且你再次將json數據返回到模板進行編譯。將數據直接放入模板中。

$.ajax({ 
      type:"GET", 
      url:"<c:url value="/listTemplates.htm"/>", 
      datatype:"application/json", 
      success:function(templates){  
        $.get("Put Your Template URL HERE",function(template} 
        var result = _.template(template);        $("#thumbnails-ul").html($("#campaignThumbTmpl").tmpl(templates)); 
     }); 
      } 
    }); 

這種方式,您將能夠訪問它通過.each循環投入,無論你在你的模板所需的數據如下:

<% _.each(data,function(anynamehere){ %> 
     <li><a href="<%= anynamehere.name %>"></li> 
    <% }); %> 

以上是從打印你的名字樣本但與其他。每個循環,你可以把其他屬性太....希望這有助於...

+0

這將無法正常工作。我不會將數據轉換成json兩次,不知道我是否理解你的問題。 – Isaac

+0

@ Is7aq:現在查看我的答案......! –

+0

我看到,我刪除了json被重寫的代碼,而是傳遞了原始的json。但這並不能解決我的嵌套json問題,因爲在模板內部,你不能訪問嵌套的json .. – Isaac