【问题标题】:Can't append items to array with ajax [duplicate]无法使用ajax将项目附加到数组[重复]
【发布时间】:2014-04-29 21:11:51
【问题描述】:

我正在尝试将 Instagram 图片的链接值附加到一个数组中。链接值在控制台中显示良好,但在 ajax 函数之后我的数组长度为 0。在所有链接之前,控制台中也会显示“0”。

我知道这个问题是由异步运行的 ajax 引起的,所以其余的 js 代码实际上是在任何东西可以附加到 $images 之前运行的,但我不知道如何规避这个问题。这是我的代码:

$liked = 'https://api.instagram.com/v1/users/self/media/liked?access_token=' + $access_token + '&COUNT=20';
$images = []

$.ajax({
    type:'get',
    dataType:'jsonp',
    cache: false,
    url: $liked,
    success: function(data) {
        for (var i = 0; i < data.data.length; i++) {
            console.log(data.data[i].images.standard_resolution.url);
            $images.push(data.data[i].images.standard_resolution.url);
        }

    }
});
console.log($images.length);

【问题讨论】:

    标签: javascript jquery ajax arrays instagram


    【解决方案1】:

    console.log 将在 ajax 调用结束之前运行;在数据循环结束后立即编写代码或 console.log 进入您的成功函数。

    喜欢:

    $liked = 'https://api.instagram.com/v1/users/self/media/liked?access_token=' + $access_token + '&COUNT=20';
    $images = []
    
    $.ajax({
        type:'get',
        dataType:'jsonp',
        cache: false,
        url: $liked,
        success: function(data) {
            for (var i = 0; i < data.data.length; i++) {
                console.log(data.data[i].images.standard_resolution.url);
                $images.push(data.data[i].images.standard_resolution.url);
            }
            console.log($images.length); // here the array is filled with response data
        }
    });
    

    【讨论】:

    • 但是为什么 $images 在 ajax 调用之后长度为 0 呢?数据被推入数组后不会留在那里吗?
    • 好的,现在我添加了正确的数组长度。那么这是否意味着我所有使用这个填充数组的函数都需要从成功块中调用?
    • 通常是的,但这取决于您的需求和您的实施
    • @jmazz 如果你想让你的代码隔离(函数/对象不相互依赖太多),你可以在success 函数内引发一个事件,并让所有订阅者通知新数据。看看api.jquery.com/triggergithub.com/rniemeyer/knockout-postbox
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2019-05-30
    • 2020-10-30
    • 1970-01-01
    • 2021-12-04
    • 2016-10-01
    相关资源
    最近更新 更多