2015-07-12 58 views
1

我試圖用兩列創建一個簡單的頁面。在左欄中,用戶可以填寫表格。在表單提交中,我想要右列刷新(通過AJAX)並使用已在控制器中創建的@url字符串填充div。現在,表單提交併不會激發我的.js頁面上的代碼 - 相反,它會重定向遠離頁面,並將我的.js作爲純文本加載到瀏覽器中。這應該是如此簡單 - 我做錯了什麼?Rails 4在嘗試使用AJAX時以純文本的形式加載JS

在配置/路線:

root 'home#home' 
    post '/pixify', to: 'home#pixify', as: "pixify", format: 'js' 

在HomeController的:

class HomeController < ApplicationController 
     respond_to :html, :js 
     skip_before_action :verify_authenticity_token 

     def home 
     end 

     def pixify 
     @url = "http://example-url.com" 
     respond_to do |format| 
      format.js { render :layout => false } 
     end 
     end 
    end 

在意見的/ home/home.html.haml:

%div#container 
    %div.left-column 
     = form_tag pixify_path, :remote => true do 
     %fieldset 
      %ul 
       %li 
        %label{:for => "url-id"} URL ID: 
        %input{:type => "text", :name => "url-id"} 

      %input{:type => "submit", :value => "Generate url", :class => "button"} 

    %div.right-column 
     %div#generated-url 

在視圖/家庭/ pixify .js.erb:

console.log("This is working"); // but it isn't 
    $('#generated-url').html('http://www.justanexample.com'); 
+0

檢查表單的輸出HTML,它應該有'數據遠程=「真」',還需要包括與軌道一起提供的'jquery-ujs'腳本。 – alan0xd7

+0

HTML輸出確實有data-remote =「true」,並且application.js中都需要'require jquery'和'require jquery_ujs'。還有其他建議嗎? – seesarahcode

+0

@seesarahcode - 你可以嘗試從控制器中刪除'format:'js''選項,並且'render:layout => false'嗎? –

回答

0

我想通了! This answer讓我在正確的道路上。由於application.html.erb中的javascript標記,jquery_ujs無法正常工作。原來,我需要改變這樣的:

<%= javascript_include_tag :defaults %>

這樣:

<%= javascript_include_tag 'application' %>

我已經改變了該行同時排查單獨的模板問題,忘記切換回來。我也從控制器中刪除了渲染語句(per @ VenkatCh的答案 - 謝謝!),現在一切都很好。

respond_to do |format| format.js end

1

js.erb文件呈現爲文本,如果你沒有在jquery_ujs庫包含在您的application.js文件:

//= require jquery 
//= require jquery_ujs 

我敢打賭,這就是區別是什麼之間的「默認「和」應用程序「文件。

而且你需要在你的Gemfile以下寶石:

gem 'jquery-rails' 
gem 'jquery-ui-rails' 
+0

只需在application.js中添加'// = require jquery_ujs'就可以在rails 5中解決這個問題。沒有sem需要'gem'jquery-ui-rails'' – DazBaldwin