在jQuery中出现“Uncaught TypeError: cannot read property 'length' of null”错误

9

当我在HTML页面上按下一个按钮时,我定义以下操作会发生:

$(document).ready(function() {
  $("#query").keydown(function () {
    // stuff
    $.get(url, function (result) {
    console.log(result);

    var list = "";

    for (var i = 0, l = result["results"].length; i < l; i++) {
      list += '<li>' + result["results"][i]["label"] + '</li>';
    }

    list = "Here are some results: <ul>" + list + "</ul>";

  });
});

“结果”中到达的是以下形式的JSON数组:
{"results":[{"label":"something"},{"label":"something else"},{"label":"many other ones"}]}

那么,为什么我对length的引用被解释为对null值属性的引用呢?


尝试使用console.log(typeof result),并告诉我们它所说的内容。 - adeneo
"object",后跟 "undefined"。 - jl.lykon
看起来你需要将https://dev59.com/bG035IYBdhLWcg3wPdkS转换一下。 - loveNoHate
1
一个 console.log 怎么能输出两行? - adeneo
1个回答

13

我相信您收到了一个JSON输入。您忘记将JSON转换为实际的JavaScript对象。您可以使用以下两种方法之一进行转换。

$(document).ready(function() {
  $("#query").keydown(function () {
  // stuff
    $.get(url, function (result) {
    result = JSON.parse(result);
    console.log(result);

    var list = "";

    for (var i = 0, l = result["results"].length; i < l; i++) {
      list += '<li>' + result["results"][i]["label"] + '</li>';
    }

  list = "Here are some results: <ul>" + list + "</ul>";

});

或者

$(document).ready(function() {
  $("#query").keydown(function () {
  // stuff
    $.getJSON(url, function (result) {
    console.log(result);

    var list = "";

    for (var i = 0, l = result["results"].length; i < l; i++) {
      list += '<li>' + result["results"][i]["label"] + '</li>';
    }

  list = "Here are some results: <ul>" + list + "</ul>";

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接