2008-05-20
JSONPだとエラーがキャッチできない
これみんなどうしてるのかな?ググってもちゃんとした情報見つけられなかった。
jQuery.getJSONが、シームレスにクロスドメインなJSONPに対応してて超便利、と思って使ってたら、errorのコールバックが動いてなかった。
ricollab 郵便番号検索のapiがよく出来てて、存在しない郵便番号をgetしようとするとstatus404でcontentにメッセージを返してくれるんだけど、そのメッセージが全然取れない。
なんでやねんと思って良く考えてみたら、JSONPってXMLHttpRequestじゃなくてscriptタグ経由での読み込みだから、onreadystatechangeイベントなんか当然なくて、「通信に失敗」「通信はコンプリートだけどエラー」って状態を取りようがないんですね。
404の時はcontentも捨てられてれるっぽくて(まぁ当然だと思う)、コールバック関数自体が動かないから、中で一生懸命エラー処理書いても無駄なんだな。
で、言いたいのは「ライブラリばっか使ってると馬鹿になるね!」ってことじゃなくて(まぁ今回の場合は楽しようとしたせいで問題に気づくのが遅れたんだけど)、JSONPだと仕組み的に通信エラーが全然取れないってこと。
スクリプトが帰ってこなかったら、当然コールバックも動かない、と。
なんか結構致命的な気がするんだけど、ホントなんだろうか?
なんか回避方法があるのかな。setTimeoutでコールバックが動いたかを監視したりとか?うーん。
「んなことねーよ」「考え方がちげーよ」情報歓迎です。
トラックバック - http://d.hatena.ne.jp/konk303/20080520/1211294342
リンク元
- 77 http://d.hatena.ne.jp/hnw/20080618
- 20 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&q=jQuery+getjson+PHP&btnG=検索&lr=lang_ja
- 15 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=zRj&q=jquery+ajax+文字コード&start=10&sa=N
- 12 http://www.google.co.jp/search?q=jquery+jsonp+エラー&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP239JP239
- 10 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP273JP273&q=jsonp+エラー
- 9 http://blogs.ricollab.jp/webtech/2008/04/zip_start/
- 8 http://www.google.co.jp/search?q=jsonp+エラー&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 7 http://reader.livedoor.com/reader/
- 7 http://www.google.co.jp/search?q=郵便番号 入力補助&btnG=検索&hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=2Wc&sa=2
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=jsonp エラー&source=web&cd=4&ved=0CEAQFjAD&url=http://d.hatena.ne.jp/konk303/20080520/1211294342&ei=R0a3Ts7REoj_mAXnqZ3GAw&usg=AFQjCNGwh-_4QyXf-85HaVY1pVMacH5nQA&sig2=_DjR606DDrWG