2013-04-29 235 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提供警報來查看。在這一點上,你可以看到數據實際上被正確地返回。