jQueryでajaxのリクエストを投げた時の、FirefoxとSafari,IEの違い
jQueryでは、AJAXを利用するときに、jQuery.ajax()関数を利用する。
ajax関数のパラメータには、javascriptのオブジェクトを設定するが、そのプロパティには以下のものを指定する。
- url:リクエスト先のURLを指定する
- type:GET or POST
- cache:ブラウザ、プロキシ、サーバーのキャッシュを返すかどうかの真偽値
- data:サーバーへ送信するデータ
- dataType:サーバーから受信するデータのタイプ
- error:エラー時のコールバックメソッド
- success:成功時のコールバックメソッド
- complete:error時、又はsuccess時のコールバックメソッドが走った後に起動するコールバックメソッド
これらのパラメータでFirefoxとSafari,IE で異なる動作をするものがある。
dataTypeである。
例えば、dataTypeに'text'を指定するとしよう。
これはサーバーからプレーンテキストが送られてくることを期待することになる。
しかし、もしサーバーから何もデータが送られてこなかったら、どうだろう。
ここでブラウザの違いが表面化する。
Firefoxの場合は、サーバーから何も送られて来なかったとしても、エラーは起きない。
しかし、SafariやIEでは、エラーが発生し、エラー時のコールバックメソッドで補足されることになる。
以下は、サーバー側をRuby On Railsで書いたときのエラー発生時のログである。
ActionView::MissingTemplate (Missing template books/index with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:text, :"*/*"], :locale=>[:en, :en]} in view paths "/Users/koichi/Documents/Rails/manage/app/views"):
Rendered /opt/local/lib/ruby1.9/gems/1.9.1/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (1.5ms)
:formats=>[:text, :"*/*"]のところで、textを送信していないと怒られているようだ。
更新処理などで、特にクライアント側でデータを受け取る必要がないときには、dataTypeをパラメータとして指定しないのがよいだろう。