2013-03-29 51 views
0

我遇到了將AJAX響應渲染爲JSRender模板的問題。JSRender未顯示JSON對象的值

我正在進行$ .getJSON調用,併成功調用render(data)函數 我使用console.log確保從$ .getJSON調用收到的數據是正確的。

function createNewsPage(event){ 
       console.log("inside createNewsPage. Event Target: "+ $(event.target).text()); 
       $.getJSON("http://query.yahooapis.com/v1/public/yql?q=xyzhere"L, 
          { 
          cache: "true", 
          dataType: "json" 
          }, 
          function(data) {insertContent(data);} 
         ); 
       event.stopPropagation(); 
       event.preventDefault(); 
       $("#listviewNews").collapsibleset('refresh'); 
       return false; 
      } 

      function insertContent(resp){ 
       console.log("---data received:\n" + JSON.stringify(resp)); 
       $("#insertedContent").html(
              $("#newsTemplate").render(resp) 
              ).trigger('create'); 

      } 

我沒有得到任何錯誤回報,但是當模板被渲染它顯示的字[對象],而不是JSON有效載荷的實際文本內容。

任何想法爲什麼發生這種情況,或者如何顯示json對象的文本(字符串)而不是僅僅說[object]?

這裏是stringfied響應(正常RSS提要):

{ 
"query": { 
    "count": 3, 
    "created": "2013-03-29T16:12:49Z" 
    }, 
    "results": { 
    "item": [ 
    { 
    "title": "BracketRacket: A quiz, a thought and Peeps" 
    }, 
    { 
    "title": "Correction: Mandatory Gun Ownership story" 
    }, 
    { 
    "title": "Clashes erupt in 2 cities in northern Egypt" 
    } 
    ] 
    } 
} 
} 
+0

請注意,發送到jsrenderer的數據必須是數組,而不是JSON對象。你能提供字符串化的迴應嗎? – dugokontov

+0

在問題 – sporting

+0

中提供了字符串化的響應不,它可以是一個對象。但它呈現的內容取決於你的#newsTemplate的外觀。在模板中,如果'表達式'返回一個對象,'someObject,{{:expression}}不會對該對象進行字符串化,它實際上將呈現someObject.toString()。 – BorisMoore

回答

0

我不知道您的模板的樣子,但這裏是例子,我將如何創建一個:

<script id="tmpl" type="text/html"> 
    <tr> 
     <td>{{>title}}</td> 
    </tr> 
</script> 

而我不會傳遞整個數據對象,而是傳遞項目:

$("#insertedContent").html($("#newsTemplate").render(data.results.item)) 

這裏是工作示例:http://jsfiddle.net/Gecew/3/

如果需要其他領域,如數量,比對這個例子來看看:http://jsfiddle.net/Gecew/4/

模板將需要尋找喜歡的事,這樣的:

<script id="tmpl" type="text/html"> 
    <span>Number of items: <strong>{{>query.count}}</strong></span> 
    <ul> 
     {{for results.item}} 
     <li>{{>title}}</li> 
     {{/for}} 
    </ul> 
</script> 

而在這種情況下通過整個數據對象渲染方法:

$("#insertedContent").html($("#newsTemplate").render(data)) 
0

嘗試做一個console.dir()上的數據,看看你得到那裏。

您可能需要更改

function(data) {insertContent(data);} 

function(data) {insertContent(data.d);}