ajaxとかjs経由でTwitter API叩くと404 Not Found返すけどエラーとしては取得できない罠。

2011.12.09 HTML5/JavaScript 

Twitter API をjQueryのajaxだとかJS経由で取得してこようとした時に、
そのユーザが存在するかどうかの判別が必要だと思うんだけど、
そこで当然、errorで取得できるか、もしくはエラーの入ったjsonが返されてくるんだろうなくらいに
考えていたんですが、いえ何も返ってきません。。

正確に言うとブラウザアクセスで確認しに行くとちゃんとエラーのjsonが確認できるんですが、
js経由とかで取得しようとするとXMLHttpRequestのreadyStateまでは、4 = completeまで行くんですが、statusが200にならず、かといって正常に404も返してきやがらねーんですよ。。

ここでも困っている人がいて、さてどうしたもんかなと色々探してたんですが、
ようやく見つけますた。。!      先輩がな!!(`・ω・´)キリッ

$.ajax({
	type 	 : 'GET',
	url  	 : 好きなTwitterAPI URL+'?&suppress_response_codes=true', ←ここ!
	dataType: "jsonp",
	timeout: 5000,
	error:function(){
		str = 'error';
		swf[$func](str);
	},
	success  : function(data){
		swf[$func](data);
}});

suppress_response_codes=trueをつければ全てのレスポンスが200 OKになって返ってくるよ!というもので、
上記では前回やった、flashにcallbackで結果のjson返しちゃってますけど、
jsで引き続きごにょごにょしたい人もswf[$func]部分を任意の関数に変えれば行けますねー。

これでajax部分でのerror処理はTwitter側のサーバが落ちてるとかでレスポンス返ってこないことを防ぐために
タイムアウトの処理を入れておくことぐらいしかできないですけど、ようやくユーザの存在有無を調べられる。。泣

ちなみにこんなページも見つけますた。
suppress_response_codes: このパラメーターを利用するとあらゆる結果は200 OKで返ってきます。例え実際はエラーであってもです。このパラメーターはブラウザー上で動いているFlashやJavaScriptが200以外のレスポンス・コードを遮断してしまうことに対応するために利用します。

なに。。そういう挙動だったのか、どおりで。。

勉強なりますなぁ。あざす!!(・∀・)

you

© rettuce.com