【问题标题】:jQuery Combine Ajax Objects From Instagram APIjQuery 结合来自 Instagram API 的 Ajax 对象
【发布时间】:2015-04-25 00:54:13
【问题描述】:

我有两个问题。我的最终目标是向 Instagram 发出请求并按标签过滤图像。 Instagram 一次不允许超过 33 张图片,所以现在我在另一个里面有一个 ajax。第一个请求获取图像,然后检查是否有更多,如果有更多我提出另一个请求。所以这是我的两个问题。

#1 - 我无法将这 2 个对象合并为 1 个。我已经尝试了所有我能想到或在网上找到的东西。

var new_data = $.extend({}, data, data2);

$.extend(data, data2);

不工作,它只给了我 1 个对象

#2 - 我下面的逻辑有些缺陷,因为这只能让我获得最多 66 张图片(2 个请求,每个 33 张图片)。我真正需要的是让 ajax 在某种循环中。但我不知道该怎么做。

var userid = '#######';
var token = '############';
var url = 'https://api.instagram.com/v1/users/' + userid + '/media/recent/?access_token=' + token + '&count=33';

$.ajax({
    type: 'GET',
    dataType: 'jsonp',
    cache: false,
    url: url,

    success: function(response){
        var paging = response.pagination;
        var data = response.data;
        console.log(data);

        if(paging.hasOwnProperty('next_url')){

            url = paging.next_url;

            $.ajax({
                type: 'GET',
                dataType: 'jsonp',
                cache: false,
                url: url,
                success: function(response2){
                    var data2 = response2.data;
                    var new_data = $.extend({}, data, data2);
                }
            });

        }else{
            // No more images so create image gallery
        }
    },
    error: function(){
        // error stuff
    }
});

这是我从 Instagram 获得的反馈示例

【问题讨论】:

  • 已编辑。它现在应该可以工作了
  • 您的问题解决了吗?如果可以,请标记我的答案,因为我付出了很多努力。谢谢

标签: jquery ajax instagram instagram-api


【解决方案1】:

经过测试。有用。试试

var imageData = [];
$(function() {
    var url = 'https://api.instagram.com/v1/tags/smpspree/media/recent/?client_id=81e3d3f35c8a4438964001decaa5a31f&count=11'; 

    getData(url, function() {
        for (var i in imageData) {
            console.log(imageData[i])
        }
    }); 

    function getData(url, callback){ 
        $.ajax({ 
            type: 'GET', 
            dataType: 'jsonp', 
            cache: false, 
            url: url, 
            success: function(response){ 
                console.log(response.data)
                imageData = imageData.concat(response.data)
                var paging = response.pagination; 
                if (paging.hasOwnProperty('next_url')) { 
                    getData(paging.next_url, callback) 
                } else {
                    callback.call();
                } 
            } 
        }); 
    }

})

【讨论】:

  • 是的 Instagram 只允许你获得 33,但它默认为 20,因此 33 可以将其设置为最大值。在您的代码示例中,我遇到了错误,一个是您缺少(在您的 if 之后,不确定其他人是什么
  • 修复了错误和 next_url 错误。你得到什么样的错误?
  • 它与images.push(response.data)有关,我相信它说images不是函数
  • 其实是未定义的不是函数
  • 我认为这行得通,给我一些时间来测试它,看看它是否返回了预期的结果。比我尝试的要干净得多。
【解决方案2】:

如果您尝试连接两个数组的元素,那么您错误地使用了$.extend

#1 为了累积数组的内容,您可以使用Array.prototype.concat 函数。 示例:

var new_data = data.concat(data2);

注意:$.extend 用于合并内容。见http://api.jquery.com/jquery.extend/

#2 Instagram 在其所有回复中都包含一个分页键。您可以在回调中使用它来触发另一个 ajax 请求。请参阅https://instagram.com/developer/endpoints/中的分页

注意:速率限制适用:经过身份验证的呼叫,每个令牌 5,000 / 小时。见https://instagram.com/developer/limits/

【讨论】:

  • 我的天啊,谢谢你的数字 #1 - 我没有意识到这些对象是在一个数组中,我尝试了所有我能找到的加入对象的方法,而我只需要加入 2 个数组! “在我的回调函数中”是什么意思?你是说我不需要像我这样的多个 ajax 调用?
  • 你能给我一个如何使用回调函数的例子吗,我想不通
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2012-08-23
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多