2013-03-29 2 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);} 
Смежные вопросы