1

私はランダムな写真を選びたいです:

http://9gag.com/top/all/index/page/1?view=json

正しく表示するには、この画像のサイズを知る必要があります。

YQLを使用して、このjsonの結果を変数(sourceと呼ばれる)に入れます。

httpsをhttpに置き換え、各円記号を削除します。

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;

alert(img.height); 何も返しません。

交換した場合

img.src = gagurldecode;

img.src = 'http://d24w6bsrhbeh9d.cloudfront.net/photo/1777377_460s.jpg';

できます。

私は何を間違えますか? PS:英語でごめんなさい!

4

2 に答える 2

2

JSONが解析されるときにスラッシュがエスケープされるため、この行は不要です。

var gagurldecode = gagurl.replace('\\','');

実際の問題では、画像がダウンロードされて調べられるまで、heightとは入力されません。widthこれは、ブラウザが(イベントハンドラで)画像を認識していない場合は非同期でonload実行されますが、ハードコードされた例のようにキャッシュから取得する場合は同期で実行される場合があります。

img.onload = function() {
    alert(img.height);
}

これは毎回機能します。

于 2012-12-28T01:55:08.487 に答える
0

なぜ置換呼び出しを行うのですか?文字列がjsonに解析された後、スラッシュがエスケープ解除されるため、これは必要ありません。(さらに、replace呼び出しは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;
于 2012-12-28T01:48:14.897 に答える