我遇到了将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');
}
我没有得到任何错误,但是当呈现模板时,它显示单词[object]而不是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 :(得分:0)
尝试对数据执行console.dir()以查看您到达那里的内容。
您可能需要更改
function(data) {insertContent(data);}
到
function(data) {insertContent(data.d);}
答案 1 :(得分: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/
如果您需要其他字段,例如count,请查看此示例: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))