我想要实现的非常简单:将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中。因此,这是不起作用的,当我console.log我的instagram_infos变量时,它说:未定义。我想这是AJAX异步调用的一个问题,但我不是这个=/仍在学习它的专家.我怎么才能解决这个问题?
发布于 2015-07-07 16:24:49
请记住,AJAX是异步的,因此,当没有返回数据,并且没有将值分配给instagram_infos变量时,您将输出到控制台。
您可以做的不是在AJAX方法中嵌套成功的回调,而是侦听诺言对象,这个对象本机由$.ajax()方法在jQuery中返回:
$(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函数外部访问时,.done()将返回null,但如果不返回正确的数据,则会返回正确的数据,因为.done()函数等待AJAX调用在触发前完成,因此将正确的值绑定到变量。
https://stackoverflow.com/questions/31273964
复制相似问题