2011-03-24 50 views
0

我正在使用Twitter頭像API在客戶端獲取用戶的頭像網址,我想緩存響應,但不是常規的JSON(或者其他任何類型),他們只是發出302重定向。閱讀圖像的絕對重定向SRC屬性URL

這不起作用(因爲它是跨域):

jQuery.getJSON('https://api.twitter.com/1/users/profile_image/60173.json', 
function(data, status, jqxhr){ 
    console.log("data: ", data); 
    console.log("status: ", status); 
    console.log("jqxhr: ", jqxhr); 
    console.log(jqxhr.getResponseHeader('Location')); 
    console.log(jqxhr.getAllResponseHeaders()); 
}) 

數據是空的,狀態是 '成功',jqhxr返回jqxhr對象,但getResponseHeader()和getResponseHeaders()爲null因爲它是跨域調用而不是真正的XMLHTTP調用。

所以我想我可以使用load()事件來顯示302發生後的圖像的實際url。我試過這個:

function avatar_loaded(img) { 
    console.log("We loaded an avatar for %s (img)[0].src is %o 
attr('src') is %o getAttribute('src') is %o", img, jQuery(img)[0].src, jQuery(img).attr('src'), img.getAttribute("src")); 
} 

var avatar_url = "https://api.twitter.com/1/users/profile_image/60173"; 

jQuery('body').append("<img onload='avatar_loaded(this)' src='" + 
avatar_url + "' width='0' height='0'>"); 

你會看到avatar_loaded函數被調用兩次。一旦與初始img src(https://api.twitter.com/1/users/profile_image/60173),然後再次,大概與302ed實際圖像url http://a1.twimg.com/profile_images/1272489576/Photo_38_normal.jpg

但我無法讀取重定向的絕對無論我嘗試什麼URL。任何其他想法?

編輯:我不希望這變成一個時間片,所以我只是用

http://api.twitter.com/1/users/show.json?user_id= 

API調用。我曾想象過這需要一個經過認證的受保護用戶的通話,但並不是這樣可以使用。

+0

它被調用兩次,但具有相同的src:http://jsfiddle.net/ionutzp/6Ekub/ – 2011-03-24 16:00:43

回答

1

而不是使用

http://api.twitter.com/1/users/profile_image/<user_id> 

API調用,我用

http://api.twitter.com/1/users/show.json?user_id= 

,而不是和提取的化身網址從那裏。它的重量並不輕,因爲它也會返回大量的其他用戶數據,但即使受保護的用戶頭像也不需要身份驗證即可返回,因此它是一種合適的替代品。

0

這裏加載它只有一次代碼: http://jsfiddle.net/ionutzp/6Ekub/1/

avatar_loaded = function(img) { 
    console.log("We loaded an avatar for %s (img)[0].src is %o attr('src') is %o getAttribute('src') is %o", img, jQuery(img)[0].src, jQuery(img).attr('src'), img.getAttribute('src')); 
} 

var avatar_url = "https://api.twitter.com/1/users/profile_image/60173"; 

$(window).load(function(){ 
     var img = new Image(); 
     $(img).load(function(){avatar_loaded(this)}).attr('src',avatar_url).appendTo('body'); 
     //jQuery('body').append("<img onload='' src='" + avatar_url + "' width='100' height='100'>"); 
}); 
+0

感謝單數負載變化,但我想要做的是獲取重定向的圖像URL - 在console.log,你會看到src與html https://api.twitter.com/1/users/profile_image/60173相同,而不是我想要閱讀的重定向URL:http:// a1.twimg.com/profile_images/1272489576/Photo_38_normal.jpg – jaygooby 2011-03-24 16:22:30

+0

爲什麼你需要絕對的? – 2011-03-25 11:21:56

+0

由於https://api.twitter.com/1/users/profile_image/ URL是受限速的Twitter API調用。最佳做法是調用一次,緩存答案一段時間,然後使用緩存的答覆。 – jaygooby 2011-03-25 13:08:03