javascript - .ajax JSON 类型错误 : Cannot read property 'length' of undefined

标签 javascript jquery html json ajax

我正在使用一个 HTML 页面,该页面有两个输入框,分别用于起始地址和目标地址。

当用户提交条目时(单击按钮),我将使用一些 JavaScript 捕获这些条目。响应是来自 Googlemaps Distance Matrix API 的 JSON。

我在提取持续时间和距离的值时遇到了困难,因为它们的嵌套方式我(显然)无法理解。

当我输入数据并启动脚本时,我得到:

TypeError: Cannot read property 'length' of undefined

我确信当我得到我想要的响应并可以将其打印到控制台时,输入框会被正确捕获。我想获取持续时间和距离值,以便可以在 HTML 中显示它们。

在其他地方阅读此错误后,我明白(我认为)我没有正确定义origins,但不知道如何解决它。

我希望有人可以帮助我让这个功能正常工作,并建议我如何在 HTML 上的 div 中显示距离和持续时间值。

这是我的 JavaScript:

$(document).ready(function() {
  console.log("ready!");

  $('#try-again').hide();

  // on form submission ...
  $('form').on('submit', function() {

    console.log("the form has beeen submitted");

    // grab values
    origin = $('input[name="origin"]').val();
    destination = $('input[name="destination"]').val();
    console.log(origin, destination)

    $.ajax({
      type: "POST",
      url: "/",
      data : { 'origin': origin, 'destination': destination },
      success: function(data) {
        var origins = data.originAddresses;
        var destinations = data.destinationAddresses;
        for (var i = 0; i < origins.length; i++) {
          var results = data.rows[i].elements;
          for (var j = 0; j < results.length; j++) {
            var element = results[j];
            var distance = element.distance.text;
            var duration = element.duration.text;
            var from = origins[i];
            var to = destinations[j];
          }
        }
       console.log(distance, duration);
      },
      error: function(error) {
        console.log(error)
      }
    });

  });

  $('#try-again').on('click', function(){
    $('input').val('').show();
    $('#try-again').hide();
    $('#results').html('');
  });

}); 

这是我正在使用的 JSON 响应结构:

{
  "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ],
  "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ],
  "rows": [ {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 70778,
        "text": "19 hours 40 mins"
      },
      "distance": {
        "value": 1887508,
        "text": "1173 mi"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 44476,
        "text": "12 hours 21 mins"
      },
      "distance": {
        "value": 1262780,
        "text": "785 mi"
      }
    } ]
  }, {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 96000,
        "text": "1 day 3 hours"
      },
      "distance": {
        "value": 2566737,
        "text": "1595 mi"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 69698,
        "text": "19 hours 22 mins"
      },
      "distance": {
        "value": 1942009,
        "text": "1207 mi"
      }
    } ]
  } ]
}

最佳答案

我怀疑您的 ajax 调用返回的数据不完整、为空或有问题。我会将你的循环包装在一个保护语句中,并检查是否未定义,如下所示:

success: function(data) {
    var origins = data.originAddresses;
    var destinations = data.destinationAddresses;
    if (typeof origins !== "undefined") {
        for (var i = 0; i < origins.length; i++) {
          var results = data.rows[i].elements;
          for (var j = 0; j < results.length; j++) {
            var element = results[j];
            var distance = element.distance.text;
            var duration = element.duration.text;
            var from = origins[i];
            var to = destinations[j];
          }
        }
    }
    console.log(distance, duration);
},

关于javascript - .ajax JSON 类型错误 : Cannot read property 'length' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275579/

相关文章:

javascript - 试图了解语法在回调函数中的工作原理

javascript - 如何统一功能(将3个功能连接为1个)

javascript - 使用 jQuery 单击 dom 上的元素

html - 显示文本的按钮

php - 在 Postgresql 数据库中处理 NaN

javascript - 在绘图/加载开始时在 Highcharts 中仅显示一个系列数据

javascript - 如何在 ngx-image-cropper 上加载图像而不调用 imageChangedEvent 事件?

javascript - 图像两端之间的动画背景滚动

javascript - 淡入淡出的背景横幅图像,自动调整为当前窗口宽度

javascript - 在 css 中本地化图像路径