【发布时间】:2013-09-23 09:20:55
【问题描述】:
我正在尝试访问以 javascript 数组返回的 2 个搜索结果。
如果在此处检查如何操作:Access / process (nested) objects, arrays or JSON 然后我根据这个结果集尝试了它:
{
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"facet":"false",
"fl":"id,title,friendlyurl,avatar,locpath,objectid,objecttype",
"indent":"off",
"q":"title_search:*castle*",
"wt":"json",
"defType":"lucene"
}
},
"response":{
"numFound":2,
"start":0,
"docs":[
{
"title":"castle a",
"objecttype":1,
"friendlyurl":"castle-a",
"avatar":"6_887_castle-a.JPG",
"objectid":6
},
{
"title":"castle b",
"objecttype":1,
"friendlyurl":"castle-b",
"avatar":"794_360_13j-castle-by-night.jpg",
"objectid":794
}
]
}
}
for (var i = 0, l = data.response.numFound; i < l; i++) {
console.log(data.response.docs[i].title);
console.log(data.response.docs[i].objecttype);
console.log(data.response.docs[i].friendlyurl);
}
如果我直接调用服务,我确实会返回结果,但我的 Chrome 控制台日志中仍然会收到 data=null。为什么会这样?
这里是相关代码
$("#searchfavs").change(function () {
$.ajax({
type: "GET",
url: "/weddingservice/searchfavoritecompany/?q=" + $("#searchfavs").val(),
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
data = $.parseJSON(data);
console.log(data);
console.log(data.response);
console.log(data.response.numFound);
for (var i = 0, l = data.response.numFound; i < l; i++) {
console.log(data.response.docs[i].title);
console.log(data.response.docs[i].objecttype);
console.log(data.response.docs[i].friendlyurl);
}
}
});
$(this).parent().hide('slow');
});
如何循环查看我的结果?
【问题讨论】:
-
@PeeHaa: s/result/response?
-
是的。您的示例数据集在撒谎,或者您的代码在撒谎。
-
data.result.docs.length,但你的对象只有data.response.docs.length -
data是一个包含 JSON 的字符串,所以你必须先解析它。由于您在该步骤中遇到错误,因此您的 JSON 必须以某种方式无效(但您发布的内容似乎是有效的)。data.result和data.items不起作用,因为字符串没有这样的属性。您应该更仔细地阅读链接的问题;)并且不要忘记执行console.log(data)、console.log(data.response)等来查看对象实际包含哪些属性。 -
啊: 您不能复制粘贴 JSON 并将其放入字符串中。您必须转义每个
\,即"fq":"userid:\"C325D42C-A777-4275-BDD2-D7810A8AB9AB\""必须是字符串内的"fq":"userid:\\"C325D42C-A777-4275-BDD2-D7810A8AB9AB\\""。
标签: javascript arrays json loops