0

AJAX 応答を JSRender テンプレートにレンダリングする際に問題が発生しています。

$.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 ペイロードの実際のテキスト コンテンツではなく [object] という単語が表示されます。

なぜこれが起こっているのか、または単に [object] と言うのではなく、json オブジェクトのテキスト (文字列) を表示する方法について何か考えはありますか?

文字列化された応答 (通常の 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"
    }
   ]
  }
 }
} 
4

2 に答える 2

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>

この場合、データ オブジェクト全体を render メソッドに渡します。

$("#insertedContent").html($("#newsTemplate").render(data))
于 2013-04-02T11:03:47.410 に答える
0

データに対して console.dir() を実行して、何が得られているかを確認してください。

変更しなければならない場合があります

function(data) {insertContent(data);}

function(data) {insertContent(data.d);}
于 2013-03-29T15:32:30.357 に答える