尝试使用javascript循环数组时出错

时间:2013-09-18 14:38:59

标签: javascript arrays json loops

我正在尝试访问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');
    });

如何循环浏览结果?

2 个答案:

答案 0 :(得分:3)

您的data JSON。已经JS objectdataType: '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);