Simple Rails AJAX调用不会作为JS处理 [英] Simple Rails AJAX Call won't process as JS
问题描述
为什么服务器端将具有HTML data-remote ="true"的表单处理为HTML?
Why would a form with the HTML data-remote="true" process as HTML on the server side?
在index.html.erb文件中只有一个简单的表过滤器:
I just have a simple table filter in my index.html.erb file:
<%= 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似乎在这里:
The data-remote HTML seems there:
<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="✓" /></div>
<select id="subject_id" name="subject_id">
<option value="1">Art</option>
<option value="2">Business & 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"}
每次.我尝试了各种技巧.
Every time. I've tried all sorts of finessing.
谢谢!
和环境转储:
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"
好的,我得到了几页Rack @env.不知道需要多少.整个事情都在这里要点.
OK, I got several pages of Rack @env. Not sure how much is needed. The whole thing is here 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>, ...
....
推荐答案
因此,这是1)愚蠢的错字和2)我猜我还不了解资产管道.
So for all that, it was 1) a stupid typo and 2) I guess I don't understand the asset pipeline yet.
我以为我的JavaScript被覆盖了3-4次.也就是说,应用程序布局具有
I thought I had my javascript covered like 3-4 times over. That is, the application layout had
'<%= javascript_include_tag :defaults %>'
'<%= javascript_include_tag "application" %>'
, layouts/courses.html
只有它不是,这就是它所需要的.我在
Only it didn't and that was what it needed. I was missing the = in
<%= javascript_include_tag "application" %>
不知道:defaults是怎么了
And no idea what was up with :defaults
我还认为,如果脚本位于assets/application.js中,那么它将位于我的应用程序中.不是.
I also thought that if the script was in assets/application.js, it would be in my app. It wasn't.
对于这么多简单的错误花这么多时间让我很抱歉.
I am so sorry for taking so much of people time for such a simple error.
我确实学到了很多有关调试AJAX的知识.非常感谢所有帮助过的人.(在这里和vi irc)
I did learn a lot about debugging AJAX. Thank you so much to all who helped. (here and vi irc)
这篇关于Simple Rails AJAX调用不会作为JS处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!