我想从中选择一张随机图片:
要正确显示,我需要知道此图像的大小。
我使用YQL将这个json的结果放在一个变量中(称为 source )。
我用http替换https并删除每个反斜杠。
var it = $.parseJSON(source);
var total = it.count-1;
var random = Math.floor((Math.random()*total)+0);
var gagurl = it.items[random];
var gagurldecode = gagurl.replace('\\','');
gagurldecode = gagurldecode.replace('https','http'); //here is the url of the image
但我无法检索此图片的大小。
var img = new Image();
img.src = gagurldecode;
警报(img.height);没有回报。
如果我替换
img.src = gagurldecode;
与
img.src = 'http://d24w6bsrhbeh9d.cloudfront.net/photo/1777377_460s.jpg';
它有效。
我做错了什么? PS:对不起我的英文!
答案 0 :(得分:2)
此行是不必要的,因为在解析JSON时会转义斜杠:
var gagurldecode = gagurl.replace('\\','');
对于您的实际问题,在下载和检查图像之后才会填充height
和width
。如果浏览器没有看到图像(在onload
事件处理程序中),则可以异步完成此操作,但如果从缓存中检索,则可以同步完成,如硬编码示例中所示:
img.onload = function() {
alert(img.height);
}
每次都会有效。
答案 1 :(得分:0)
你为什么要做替换电话? 这不是必需的,因为在将字符串解析为json之后,斜杠将不会被转义。 (此外,您的替换呼叫不是replaceAll)
试试这个:
//str is going to be the json you get from that url
var str = '{"items":["http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/5373376_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/2899638_460s_v1.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/3196367_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/1777377_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/3233576_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/3101249_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/3279498_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/2487961_460s.jpg","http:\/\/d24w6bsrhbeh9d.cloudfront.net\/photo\/2693569_460s.jpg"],"layout":"list","count":9}'
var obj = JSON.parse(str);
var src = obj.items[~~(Math.random() * (obj.items.length - 1))];
img.src = src;