2012-03-12 6 views
0

HTMLのdata-remote = "true"のフォームがサーバー側でHTMLとして処理されるのはなぜですか?シンプルなレールAJAXコールはJSとして処理されません

私はちょうど私のindex.html.erbファイルに簡単なテーブルフィルタを持っている:

<%= form_tag('by_subject', :remote => true, :method => "get") do %> 
<%= select_tag("subject_id", options_for_select(Subject.all.collect {|p| [ p.name, p.id ] })) %> 
    <%= submit_tag "Search" %> 
<% end %> 

データのリモートHTMLがあるようです:

<form accept-charset="UTF-8" action="by_subject" data-remote="true" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div> 
<select id="subject_id" name="subject_id"> 
     <option value="1">Art</option> 
     <option value="2">Business &amp; Tech</option> 
     <option value="15">undefined</option> 
     <option value="16">Music</option></select> 
    <input name="commit" type="submit" value="Search" /> 
</form> 

しかし、私のコントローラのアクション

def by_subject 
@courses = Course.where(:subject_id => params[:subject_id]) 
respond_to do |format| 
    format.html { raise "It rendered HTML again." } 
    format.js { raise "Ah, it wants to render Javascript." } 
    format.json { render json: @courses } 
end 

収量

It rendered HTML again. 

... 

Request 

Parameters: 

{"utf8"=>"✓", 
"subject_id"=>"16", 
"commit"=>"Search"} 

毎回。私はあらゆる種類のフィッシングを試みました。

ありがとうございます!

およびenvダンプ:

GATEWAY_INTERFACE: "CGI/1.2" 
HTTP_ACCEPT: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
HTTP_ACCEPT_ENCODING: "gzip, deflate" 
HTTP_ACCEPT_LANGUAGE: "en-us,en;q=0.5" 
REMOTE_ADDR: "127.0.0.1" 
SERVER_NAME: "localhost" 
SERVER_PROTOCOL: "HTTP/1.1" 

OK、私はラック@envのいくつかのページを得ました。どのくらい必要かわからない全体はここにgistです。

#<Rack::Request:0x4396260 @env={"SERVER_SOFTWARE"=>"thin 1.3.1 codename Triple Espresso", 
"SERVER_NAME"=>"localhost", "rack.input"=>#<StringIO:0x459f720>, "rack.version"=>[1, 0], "rack.errors"=>#<IO:<STDERR>>, 
"rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, 
"REQUEST_METHOD"=>"GET", 
"REQUEST_PATH"=>"/courses/by_subject", 
"PATH_INFO"=>"/courses/by_subject", 
"QUERY_STRING"=>"utf8=%E2%9C%93&subject_id=16&commit=Search", 
"REQUEST_URI"=>"/courses/by_subject?utf8=%E2%9C%93&subject_id=16&commit=Search", 
"HTTP_VERSION"=>"HTTP/1.1", 
"HTTP_HOST"=>"localhost:3000", 
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Windows NT 6.0; rv:10.0.2) Gecko/20100101 Firefox/10.0.2", 
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
"HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5", 
"HTTP_ACCEPT_ENCODING"=>"gzip, deflate", 
"HTTP_CONNECTION"=>"keep-alive", 
"HTTP_REFERER"=>"http://localhost:3000/courses", 
"HTTP_COOKIE"=>"__utma=111872281.1794585154.1323696638.1326994528.1326997977.9; __utmz=111872281.1323696638.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _creditflex_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJWZhNDZhZmMyZDU4OTczMGM0NDNmMDBiMjhiMzc3YzNlBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMTFhaFNlRUcyTmErSWZDQWtQdmF5WEg2L3RRNG00Q2tBRVZBUDJCdlZ0RWM9BjsARg%3D%3D--ec4ddf8986b88c6aae5429305fbf735527770d95", 
"GATEWAY_INTERFACE"=>"CGI/1.2", "SERVER_PORT"=>"3000", 
"SERVER_PROTOCOL"=>"HTTP/1.1", "rack.url_scheme"=>"http", 
"SCRIPT_NAME"=>"", "REMOTE_ADDR"=>"127.0.0.1", 
"async.callback"=>#<Method: Thin::Connection#post_process>, "async.close"=>#<EventMachine::DefaultDeferrable:0x45ab6f0>, 
"ORIGINAL_FULLPATH"=>"/courses/by_subject?utf8=%E2%9C%93&subject_id=16&commit=Search", 
"action_dispatch.routes"=>#<ActionDispatch::Routing::RouteSet:0x4893330 @named_routes=#<ActionDispatch::Routing::RouteSet::NamedRouteCollection:0x4893318 
@routes={:ckeditor=>#<Journey::Route:0x40b8490 @name="ckeditor", @app=Ckeditor::Engine, @path=#<Journey::Path::Pattern:0x40b8f58 @anchored=false, @spec=/ckeditor, @requirements={}, @separators="/.?", @names=[], @optional_names=nil, @required_names=nil, @re=/\A\/ckeditor/>, @verb=//, @ip=//, @constraints={}, @defaults={}, @required_defaults=nil, @required_parts=nil, @parts=[], @decorated_ast=nil, @precedence=1>, 
:response=>#<Journey::Route:0x4a74d10 @name="response", @app=#<ActionDispatch::Routing::RouteSet::Dispatcher:0x45fa8d8 @defaults={:action=>"new", :controller=>"responses"}, @glob_param=nil, @controllers={}>, @path=#<Journey::Path::Pattern:0x45fa098 @anchored=true, @spec=/responses/:id(.:format), 

.... 

:by_subject_courses=>#<Journey::Route:0x5535e40 @name="by_subject_courses", @app=#<ActionDispatch::Routing::RouteSet::Dispatcher:0x5537580 @defaults={:action=>"by_subject", :controller=>"courses"}, @glob_param=nil, @controllers={"courses"=>#<ActiveSupport::Dependencies::ClassCache:0x3cc3fd8 @store={"CoursesController"=>CoursesController, "Subject"=>Subject(id: integer, name: string, created_at: datetime, updated_at: datetime, course_id: integer)}>}>, 
@path=#<Journey::Path::Pattern:0x5537388 @anchored=true, @spec=/courses/by_subject(.:format), @requirements={}, @separators="/.?", @names=["format"], @optional_names=nil, @required_names=nil, @re=/\A\/courses\/by_subject(?:\.([^\/.?]+))?\Z/>, @verb=/^GET$/, @ip=//, @constraints={:request_method=>/^GET$/}, @defaults={:action=>"by_subject", :controller=>"courses"}, @required_defaults=nil, @required_parts=nil, @parts=[:format], @decorated_ast=/courses/by_subject(.:format), @precedence=116>, 
:courses=>#<Journey::Route:0x553a028 @name="courses", @app=#<ActionDispatch::Routing::RouteSet::Dispatcher:0x553b270 @defaults={:action=>"index", :controller=>"courses"}, @glob_param=nil, @controllers={"courses"=>#<ActiveSupport::Dependencies::ClassCache:0x3cc3fd8 @store={"CoursesController"=>CoursesController, "Subject"=>Subject(id: integer, name: string, created_at: datetime, updated_at: datetime, course_id: integer)}>}>, 
@path=#<Journey::Path::Pattern:0x553b078 @anchored=true, @spec=/courses(.:format), @requirements={}, @separators="/.?", @names=["format"], @optional_names=nil, @required_names=nil, @re=/\A\/courses(?:\.([^\/.?]+))?\Z/>, @verb=/^GET$/, @ip=//, @constraints={:request_method=>/^GET$/}, @defaults={:action=>"index", :controller=>"courses"}, @required_defaults=nil, @required_parts=nil, @parts=[:format], @decorated_ast=/courses(.:format), @precedence=117>, ... 

....

+0

ラック '@ env'は助けてくれるかもしれませんが、追加できますか? – Reactormonk

+0

ありがとう、タス。追加されました。 –

+0

それ以上のことはありませんか?そこにはもっと多くのものがあるはずです。ラックスタックの開始時にダンプします。 – Reactormonk

答えて

0

だから、それは1)愚かなタイプミス、2)私はまだ資産パイプラインを理解していないと思う。

私は自分のJavaScriptが3-4回以上覆われていると思った。つまり、アプリケーションのレイアウトは

'<%= javascript_include_tag :defaults %>' 
    '<%= javascript_include_tag "application" %>' 

を持っていたので、layouts/courses.html

はそれだけではありませんでしたし、それはそれが必要だったものでした。私はまた、スクリプトは、資産/ application.jsにあった場合、それは私のアプリであることだろうと思っデフォルト

:私は

<%= javascript_include_tag "application" %> 

そして、何にアップしたノーアイデアで=がありませんでした。そうではありませんでした。

このような単純なエラーのために多くの人の時間を取ることは大変申し訳ありません。

私はAJAXのデバッグについて多くのことを学びました。助けてくれた皆さん、ありがとうございました。 (こことvi irc)

3

私の推測ではjqueryののデータ型(デフォルトJSのフレームワーク)$アヤックス機能が設定されていないか、正しく設定されていることです。データ型が設定されていない場合は、jQuery docsは言う:

何も指定されていない場合は、jQueryの(XMLのMIMEタイプは1.4 JSONで、XMLを生成しますレスポンスのMIMEタイプに基づいて、それを推測しようとしますが得られます1.4スクリプト内のJavaScriptオブジェクトはスクリプトを実行し、それ以外のものは文字列として返されます)。

私はこのjQueryの-UJS(レールが付属しています控えめなjavascriptの)で、関連する部分だと思う:それはありline 106オンhttps://github.com/rails/jquery-ujs/blob/6186a854e9cd291045da3c98c31fb32ff2cf0aa6/src/rails.js#L97

を:

dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType) 

のいずれかの場合、私は知りませんそれらはあなたのjsまたはjquery-ujsの他の場所によって設定されています。それが言うので、私はまた、上記のライン97を強調した:

// Default ajax function, may be overridden with custom function in $.rails.ajax 
ajax: function(options) { 
    return $.ajax(options); 
}, 

だから私はデータ型を設定しようとする最善のことと思われる方法は定かではありません。すべてのAjaxリクエストを特定のdataTypeにしたいかどうかにかかっています。

+0

ありがとう、キャロル。何が間違っているのか分かりません。これは、このアプリで私の最初の唯一のAJAX呼び出しです。そしてそれはとても単純なものです... –

関連する問題