我想要实现的非常简单:将Instagram的API中的对象放在变量中,这样我就可以随意使用它。这是我到目前为止所做的:
$(document).ready(function() {
// initialize var already
var instagram_infos;
function get_instagram_feed(callback) {
var client_id = 'f6014154300f41ec98aw8dw087e49096';
var user_id = "1681116416";
$.ajax({
url: 'https://api.instagram.com/v1/users/'+user_id+'/media/recent/',
dataType: 'jsonp',
type: 'GET',
data: {client_id: client_id},
success: callback,
error: function(data){
console.log(data);
}
});
}
function callback_instagram(result) {
instagram_infos = result;
}
get_instagram_feed(callback_instagram);
console.log(instagram_infos);
});
正如你所看到的,我正在通过我的成功ajax传递一个回调函数,在我的回调中,我只想把Instagram中的对象放回我的变量instagram_infos中。 Tho,这不起作用,当我在console.log上我的instagram_infos变量时,它说:undefined。我想这是AJAX异步调用的问题,但我不是这方面的专家= /还在学习它...我该如何解决这个问题?
答案 0 :(得分:2)
您需要考虑AJAX调用是异步的,因此在调用AJAX函数后,您不能指望在instagram_infos中有值。您需要等待AJAX调用的响应。你可以使用“承诺”。我正在与您分享可能对您有帮助的链接:
答案 1 :(得分:2)
问题是AJAX将异步执行。因此callback_instagram
实际上会在function get_instagram_feed() {
var client_id = 'f6014154300f41ec98aw8dw087e49096';
var user_id = "1681116416";
return $.ajax({ // $.ajax will return a Promise (well really a Deferred Object)
url: 'https://api.instagram.com/v1/users/'+user_id+'/media/recent/',
dataType: 'jsonp',
type: 'GET',
data: {client_id: client_id}
});
}
get_instagram_feed().then(function(instagram_infos) {
// now you have whatever instagram sends back.
}).fail(function(err) {
// deal with error
})
之前运行。
你最好不要使用诺言。
UPDATE table2
set table2.period = table1.period,
table2.weekfield = CASE
WHEN table2.datefield between table1.date1 and table1.date2 then 1
WHEN table2.datefield between table1.date2 and table1.date3 then 2
WHEN table2.datefield between table1.date3 and table1.date4 then 3
ELSE NULL
END
from table2
inner join table1 on (whatever)
where table2 (whatever)
答案 2 :(得分:1)
请记住,AJAX是异步的,因此当没有返回数据时,您将输出到控制台,并且没有为instagram_infos
变量分配值。
你可以做的不是在AJAX方法中嵌套你的成功回调,而是可以监听promise对象,它由jQuery中的$.ajax()
方法原生返回:
$(document).ready(function() {
// Set up variables needed for AJAX call
var instagram_infos,
client_id = 'f6014154300f41ec98aw8dw087e49096',
user_id = '1681116416',
get_instagram_feed = $.ajax({
url: 'https://api.instagram.com/v1/users/'+user_id+'/media/recent/',
dataType: 'jsonp',
type: 'GET',
data: { client_id: client_id }
});
// Listen to promise object returned
get_instagram_feed
.done(function(data) {
// When AJAX call is successful
console.log(data);
instagram_infos = data;
})
.fail(function(data) {
// When AJAX call has failed
console.log(data);
});
请注意,instagram_infos
从jqXHR.done()
函数外部访问null
时将返回.done()
,但是否则会返回正确的数据,因为{{1}}函数等待AJAX调用在触发之前完成,因此将正确的值绑定到变量。