jQuery 合并来自 Instagram 的 Ajax 个对象 API
jQuery Combine Ajax Objects From Instagram API
我有两个问题。我的最终目标是向 Instagram 发出请求并按标签过滤图像。 Instagram 一次不允许超过 33 张图片,所以现在我在另一个里面有一个 ajax。第一个请求获取图像,然后检查是否有更多,如果有更多我提出另一个请求。所以这是我的 2 个问题。
#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 返回的示例
已测试。有用。尝试
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();
}
}
});
}
})
如果您尝试连接两个数组的元素,那么您使用的 $.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/
我有两个问题。我的最终目标是向 Instagram 发出请求并按标签过滤图像。 Instagram 一次不允许超过 33 张图片,所以现在我在另一个里面有一个 ajax。第一个请求获取图像,然后检查是否有更多,如果有更多我提出另一个请求。所以这是我的 2 个问题。
#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 返回的示例
已测试。有用。尝试
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();
}
}
});
}
})
如果您尝试连接两个数组的元素,那么您使用的 $.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/