5

さて、私はかなり長い間、Rails アプリで ajax を使用してきました。どういうわけか、私の最初のRails 3.1アプリでは、基本を機能させることができません..

# application.js
//= require jquery
//= require jquery_ujs

# the form
= form_for @signup, :url => '/signup', :remote => true do |f|
    = f.text_field :email, :class => 'email', :size => 26
    = f.submit 'Notify me'

# the controller
def signup        # route.rb has 'match '/signup' => 'controller#signup'
  respond_to do |format|
    format.js
  end
end

# view: signup.js.erb
alert('wtf?');

さて、私が知る限り、このフォームを送信すると、アラート ボックスがトリガーされるはずです。そうではありません。フォームの送信は、テンプレートをレンダリングするコントローラー アクションに渡されます。

Rendered teaser_pages/signup.js.erb (0.1ms)
Completed 200 OK in 8ms (Views: 7.2ms | ActiveRecord: 0.0ms)

jsのみがトリガーされません。

UJS ヘルパーはロードされ、機能しています (と思います)。

link_to 'click me', '#', :confirm => 'confirmation box!'

..期待どおりに確認ボックスがトリガーされます。

何が欠けている可能性がありますか?どの方向を見てもよろしいです。

ありがとう、エルヴィン

アップデート:

そのため、Rails はヘッダーで間違った content-type を証明しているようで、text/html代わりにtext/javascript. いくつかのテストの後でも:

render :js => "alert('AHAHAHAHA');", :content_type => 'text/javascript'

コンテンツタイプのヘッダーを引き続きレンダリングしますtext/html

同じバージョンの新しいアプリケーションを実行すると、jquery-rails動作します。このアプリケーションでは、そうではありません..

どこを見ればいいですか?

4

1 に答える 1

1

私は同じ問題を抱えています。同じgemfileを使用してテストアプリをセットアップしたところ、説明したのと同じ結果が得られました.新しく作成されたアプリでは機能しますが、古いアプリでは機能しません. とりあえず、実際のレンダリング呼び出しの前にコンテンツ タイプ ヘッダーを手動で設定します。

respond_to do |format|
  headers["Content-type"] = 'text/javascript'
  format.js { render "the_template" }
end

一方、これは正しく配信された content_type を変更しませんでした:

respond_to do |format|
  format.js { render "the_template", :content_type => 'text/javascript' }
end

これが当面役立つことを願っています。

その間に本当の解決策を見つけましたか?

アップデート:

少なくとも私は本当の問題を見つけました。content_type を text/html に強制する before_filter があります。これは、テスト用に少し前に追加したもので、非アクティブ化するのを忘れていました。

def set_header
response.headers["Content-Type"] = "text/html; charset=utf-8"
end
于 2011-12-19T23:30:59.353 に答える