我正在尝试访问2个搜索结果,并在javascript数组中返回。
如果选中了如何执行此操作: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');
});
如何循环浏览结果?
答案 0 :(得分:3)
您的data
不 JSON。已经JS object,dataType: 'json'
已经过了data = $.parseJSON(data);
。所以你不需要使用data
来自jQuery docs。
dataType (默认值:智能猜测(xml,json,script或html))
输入:字符串您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回)。可用的类型(以及作为成功回调的第一个参数传递的结果)是:
“ json ”:将响应评估为JSON并返回JavaScript对象。 JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。从jQuery 1.9开始,空响应也被拒绝;服务器应该返回null或{}的响应。 (有关正确的JSON格式的更多信息,请参阅json.org。)
此外items
不包含任何response
。它包含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);
}
中。所以你可以像这样循环
{{1}}
另请注意,我刚发现您的JSON格式不正确。 JSON必须有效才能使其工作。仔细尝试了解comment @FelixKling。
答案 1 :(得分:0)
我发现了这个问题:
您的响应数据已经是一个对象,因此无需解析。当你尝试parseJson时,它返回null。
data = $.parseJSON(data); //remove this line which is returning null and try
console.log(data);
console.log(data.response);
console.log(data.response.numFound);