Я использую API аватара Twitter для получения URL-адреса аватара пользователя на стороне клиента, и я хотел бы кэшировать ответ, но вместо обычного JSON (или даже любого другого типа) они просто выполните редирект 302.
Это не работает (потому что это междоменный домен):
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 (), чтобы показать фактический URL-адрес изображения после того, как произошло 302. Я попробовал это:
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), а затем снова, предположительно, с 302-м действительным URL-адресом изображения http://a1.twimg.com/profile_images/1272489576/Photo_38_normal.jpg
Но я не могу прочитать перенаправленный абсолютный URL независимо от того, что я пытаюсь. Есть другие идеи?
РЕДАКТИРОВАТЬ: Я не хотел, чтобы это превратилось в время, поэтому я просто использовал
http://api.twitter.com/1/users/show.json?user_id=
вызов API. Я предполагал, что для защищенных пользователей это потребует аутентифицированного вызова, а не так, что его можно использовать.