2011-05-09 94 views
1

我想嘗試jQuery模板插件。jquery模板不呈現單個項目

我定義爲這樣一個模板:

<script id="referentTemplate" type="text/x-jquery-tmpl"> 
<form id="referent-form" method="post" action="#"> 
<div class="fields"> 
    <input type="hidden" name="referentID" value="${ReferentID}" /> 
    <table> 
     <tr><td><label for="firstName">First Name</label><br /> 
       <input type="text" name="firstName" value="${FirstName}" /></td> 
      <td><label for="lastName">Last Name</label><br /> 
       <input type="text" name="lastName" value="${LastName}" /></td></tr> 
     <tr><td><label for="fullName">Full Name</label><br /> 
       <input disabled="disabled" type="text" name="fullName" value="${FirstName} ${LastName}" /></td></tr> 
     <tr><td><label for="phoneNumber">Telephone</label><br /> 
       <input type="text" name="phoneNumber" value="${PhoneNumber}" /></td> 
      <td><label for="email">EMail</label><br /> 
       <input type="text" name="email" value="${Email}" /></td></tr> 
    </table> 
</div> 
<div id="validation-message"></div> 
<div style="text-align:right; padding: 8px 0px 0px 0px;"> 
    <input type="submit" id="btnSave" class="button" value="Save" /> 
    <input type="button" id="btnCancel" class="button" value="Cancel" /> 
</div> 
</form> 
</script> 

我想dinamically使用下面的代碼加載這個模板

$("#new-referent").click(function() { 
    $.ajax({ 
     type: "get", 
     url: baseUrl + 'MyService.asmx/New', 
     data: JSON.stringify({}), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      // Get the referent item from the webservice 
      var referent = msg.d; 
      // Render the template with the Referent data 
      var referentTemplate = $("#referentTemplate").tmpl(referent); 
      //Show the Dialog 
      $("#referent-dialog").empty().html(referentTemplate).dialog('open'); 
     } 
    }); 
}); 

一切正常,除了一個事實,即形式很不錯輸入不包含從服務器返回的數據。我檢查了與提琴手回來的數據,它包含正確的值這樣的

{"d":"{\"ReferentID\":-1,\"LastName\":\"Abbot\",\"FirstName\":\"John\",\"FullName\":null,\"PhoneNumber\":null,\"Email\":null}"} 

我在哪裏做錯了?

感謝您的幫助!

回答

1

很明顯,您的網站會返回一個只包含一個密鑰d的JSON對象,其中包含一個JSON字符串。

所以你需要使用var referent = JSON.parse(msg.d);或(這會更好)返回適當的JSON。

+0

感謝您的回答。在服務器端,我只是使用默認值(用於測試)創建一個新對象,並使用JavaScriptSerializer類將其格式化爲JSON格式。請給我更多關於如何正確格式化JSON結果的信息? – Lorenzo 2011-05-09 15:11:21

+0

我對.NET JSON構建器一無所知。您應該簡單地嘗試確保您的服務器在JSON對象內發送單個JSON對象而不是JSON字符串。 – ThiefMaster 2011-05-09 15:13:01

1

的[的WebMethod]應正確返回你的JSON。你可能想試試這個:

 $("#new-referent").click(function() { 
      $.ajax({ type: "POST", 
       url: baseUrl + 'MyService.asmx/New', 
       data: JSON.stringify({}), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       beforeSend: function (xhr) { xhr.setRequestHeader("Content-type", "application/json; charset=utf-8"); }, 
       success: function (msg) { 
        $('#referent-dialog').html(''); 
        $('#referentTemplate').tmpl(msg.d).appendTo('#referent-dialog'); 
        $('#referent-dialog').dialog('open'); 
       } 
      }); 
     });