jQueryの「getJSON」と「$(window).load()」

6月23日をもって、FacebookページがRSSを提供しなくなったため、どうしても、RSSを取得したい場合は、「Access Token」を使用して、RSSを取得せざるを得なくなりました。


そこで、Facebookページから取得したRSS(JSON形式)を、jQueryでごちょごちょしていた際に、少しはまったので、今後もうっかりはまりそうな気がするので、ブログにメモを残しておきます。


Google Chromeでは、ページの読み込みが完了しないと、IMGタグの「height」「width」が取得できない仕様のため、getJSON内に、「$(window).load()」を入れることで、読み込み完了後に処理させようと考え、以下のように記述しました。

$.getJSON( $url, function(json){
	$(window).bind('load', function(){
		// 実行されない
	});
});

$(window).bind('load', function(){
	// 実行される
});


ところが、getJSON内の「$(window).load()」内の処理が実行できない問題が発生しました。
記述的には問題がないように思うものの正常に機能しません。

$(window).bind('load', function(){
	$.getJSON( $url, function(json){
		// 実行される
	});
});


そこで、上記のように記述を変えたところ、正常に処理が行われました。


上記の問題の発生で、ノンプログラマの自分にはどうしても敷居が高く感じていたものの「jQuery.Deferred」の使用を意識しなければと思いつつ…頑張って「jQuery.Deferred」を理解し、「jQuery.Deferred!うまうま!」と言えるようになりたいものです。


FacebookページのRSSの提供が停止したことで、様々な問題が発生したことを踏まえると、Facebookは、定期的に仕様を変更するため、JavaScriptjQueryがあまり得意でない方は、Facebookが提供するプラグインの使用にとどめるべきではないかと感じます。


ただ、プラグインにしても、突然「LikeBox」が廃止になり「Page Plugin」に変更しなければいけない作業が降って湧いたりするため、多くのクライアントさんのWEBサイトで、プラグインを利用していた場合、修正作業が増える気がするのであれですが…


とは言え、ユーザの視点で考えると「Twitterなんか使わない!Facebookなんか使わない!」と言える状況でもなく、今後も、各WEBサービスとほどよいバランスを探りつつ、右往左往する日々が続きそうです。