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時のコールバックメソッドが走った後に起動するコールバックメソッド


これらのパラメータでFirefoxSafari,IE で異なる動作をするものがある。
dataTypeである。
例えば、dataTypeに'text'を指定するとしよう。
これはサーバーからプレーンテキストが送られてくることを期待することになる。
しかし、もしサーバーから何もデータが送られてこなかったら、どうだろう。


ここでブラウザの違いが表面化する。
Firefoxの場合は、サーバーから何も送られて来なかったとしても、エラーは起きない。
しかし、SafariIEでは、エラーが発生し、エラー時のコールバックメソッドで補足されることになる。


以下は、サーバー側を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をパラメータとして指定しないのがよいだろう。