【问题标题】:Jquery cannot access array outside of loopJquery 无法访问循环外的数组
【发布时间】:2017-09-17 10:21:21
【问题描述】:

我从以下代码中得到一个奇怪的行为。以下代码来自 ajax 成功,并且console.log(positions); 内部循环工作正常,但外部它什么也没给我。

success: function (data) {
    var positions = [];

    $.each(data, function (index, value) {
        $.each(value, function (index1, value1) {
            positions.push({
                lat: value1.rider_location.lat,
                lng: value1.rider_location.lng,
            });
            //This works fine | I can get the results. But after commenting out the below line then the last `console.log(positions)` doesn't shows anything.
             console.log(positions);
        });
    });
    console.log(positions);
}

来自 Ajax 的 data 给了我以下结果,然后我循环遍历它并将值分配给 positions

循环内部给我以下结果:

并且在循环之外console.log(positions) 没有给出任何例外,也没有给出任何结果。

【问题讨论】:

  • 它没有给出任何例外,因为你声明了一个空的positions,所以当你记录它时它会打印出来。您的datavalue 很有可能是空的。尝试在循环中记录这些内容。
  • 似乎datavalue 是一个空集合。你能显示那些填充的代码吗?
  • 究竟你想在哪里使用console.log(positions)?在success:(如问题中)或其他地方? (即在success:function(data) { 之外)?
  • 感谢您更新问题。您可以在问题中的代码 sn-p 中重新创建问题吗? 您提供的代码没有任何问题我怀疑您已经这样做了,但请阅读minimal reproducible example
  • 我只能猜测您正试图在success: 回调之外访问positions(甚至可能在您的ajax 调用开始之前),但事实并非如此你在问题的代码中得到了什么,两个独立的小提琴已经证明它可以正常工作。

标签: javascript jquery arrays loops


【解决方案1】:

您的数据不是数组而是对象。在其上使用$.each() 意味着它将遍历其所有属性,这就是为什么它不能按预期工作的原因。您可能想要循环遍历data.riders。也没有其他数组可以循环,所以第二个循环不应该在那里:

var data = {
    riders: [{
            rider_location: {
                lat: 2,
                lng: 3
            }
        },
        {
            rider_location: {
                lat: 4,
                lng: 5
            }
        }
    ]
};

var positions = [];

$.each(data.riders, function(index, value) {
    positions.push({
        lat: value.rider_location.lat,
        lng: value.rider_location.lng,
    });
});

console.log(positions);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

    【解决方案2】:

    鉴于返回的数据格式,我会尝试:

    似乎您正在尝试使用第二个循环遍历 Rider_location,但 Rider_location 是一个对象,因此您可以访问它的属性。

    success: function (data) {
        var positions = [];
    
        $.each(data.riders, function (index, value) {
               positions.push({
                    lat: value.rider_location.lat,
                    lng: value.rider_location.lng,
                });
        });
        console.log(positions);
    }
    

    PS 随时代表我 :)

    【讨论】:

    • Uncaught TypeError: Cannot read property 'lat' of undefined
    • 试试console.log(value)和console.log(value.rider_location),看看你得到的结果是否正确。
    猜你喜欢
    • 2019-08-11
    • 2020-08-24
    • 2015-11-15
    • 2021-12-27
    • 1970-01-01
    • 2021-05-13
    • 2020-04-04
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多