2013-04-29 128 views

回答

1

你需要这样做:

function getUserId() { 
    var url = "http://api.flickr.com/services/rest/?jsoncallback=?&api_key=fc6c52ed4f458bd9ee506912a860e466&method=flickr.urls.lookupUser&format=json&nojsoncallback=1&url=http://www.flickr.com/photos/flickr"; 
    var getUsername = null; 

    return $.ajax({ 
     dataType: 'jsonp', 
     url: url, 
     async: false 
    }); 
} 

getUserId().done(function (result) { 
    // Call the alert here.. 
    alert(result.user.id); 
}); 

FIDDLE

+1

添加“异步:false”是什么使这个答案的工作。这使得Javascript等待AJAX​​函数完成,然后再执行该函数。 – nikeaa 2013-04-29 19:08:56

+0

没有同步jsonp。 – Musa 2013-04-29 19:12:09

3

你的数据被正确返回:

Object {user: Object, stat: "ok"} 
stat: "ok" 
user: Object 
    ->id: "[email protected]" 
    ->username: Object 
__proto__: Object 

enter image description here

这是你如何处理结果:

function foo() { 
    return $.ajax(...); 
} 

foo().done(function(result) { 
    // code depending on result 
}).fail(function() { 
    // an error occurred 
}); 

function getUserId() { 
    var url = "http://api.flickr.com/services/rest/?jsoncallback=?&api_key=fc6c52ed4f458bd9ee506912a860e466&method=flickr.urls.lookupUser&format=json&nojsoncallback=1&url=http://www.flickr.com/photos/flickr"; 
    var getUsername = null; 

    return $.ajax({ 
     dataType: 'jsonp', 
     url: url, 
     async: false 
    }); 
} 

getUserId().done(function (result) { 
    // Call the alert here.. 
    alert(result.user.id); 
}).fail(function(err){ 
     alert('an error has occured :'+err.toString()); 
    }); 
0

这是因为AJAX功能asyncronously调用。这意味着该URL被调用,并且在进行处理时,JavaScript代码将继续执行并从您的函数返回。您可以通过在成功处理程序中为getUsername提供警报来查看。在这一点上,你可以看到数据实际上被正确地返回。