Rails Ajax: .js.erb отображается как текст, не выполняется - PullRequest
1 голос
/ 04 августа 2011

Я использую jquery-rails gem с javascript_include_tag :defaults.Следовательно, страница имеет заголовок:

<script src="/javascripts/jquery.js?1312437063" type="text/javascript"></script> 
<script src="/javascripts/jquery_ujs.js?1312437070" type="text/javascript"></script> 
<script src="/javascripts/application.js?1311268601" type="text/javascript"></script> 
<meta name="csrf-param" content="authenticity_token"/> 
<meta name="csrf-token" content="KdgrBxF726xfPP3qbNOHd/0TG9c7lVCoZDXPnadFOzI="/> 

Ajax-запрос поступает из представления со строкой:

<%= link_to 'Run', :controller => "config_panel", :action => "full_run", :remote => true, :format => :js %>

Он отображается как:

<a href="/config_panel/full_run.js?remote=true">Run</a>

Ответ, определенный вконтроллер:

def full_run
  respond_to do |format|
    format.js { render :text => "alert();"}
    format.xml
  end
end

При нажатии на ссылку сервер регистрирует:

Started GET "/config_panel/full_run.js?remote=true"
Processing by ConfigPanelController#full_run as JS
Parameters: {"remote"=>"true"}
Rendered text template (0.0ms)
Completed 200 OK in 1ms (Views: 0.6ms | ActiveRecord: 0.0ms)

И браузер показывает простой текст:

alert();

Заголовок HTML имеет status: 200и content-type: text/javascript.И консоль Chrome JavaScript не показывает ошибок.

Я попробовал следующий обходной путь:

  • include rails.js --- не удалось
  • изменить link_to на <div onclick="$.ajax(...)"> --- сработало

Меня очень смущает поведение :remote => true в link_to.

1 Ответ

0 голосов
/ 04 августа 2011

Попробуйте это:

<%= link_to 'Run', { :controller => "config_panel", :action => "full_run" }, :remote => true %>

если вы использовали помощники маршрута, передавать его как хэш не нужно

ссылка_ссылка

...