2014-01-07 59 views
3

我有一個鏈接,應該使用AJAX無需重新加載頁面加載其旁邊的一個部分。這裏是鏈接:Rails - 使鏈接與AJAX工作

<%= link_to 'test ajax link', profile_form_path , remote: true %> 

下面是該鏈接應到控制器:

class ProfilesController < ApplicationController 
    def profile_form #the action is currently static so there is nothing in the controller 
    end 
end 

這裏是JS查看控制器動作去:
profile_form.js。 erb

$('.tab-edit-profile').html("<%= j render 'profile_form_p' %>"); 

但是,它不起作用。瀏覽器返回該錯誤:

Template is missing 
Missing template profiles/profile_form 

這裏是路線文件中的行:

get 'profile_form', to: 'profiles#profile_form' 

如果我更改文件名profile_form.html.erb,頁面加載但不能用ajax明顯。任何人都可以告訴我正確的方式來使用Ajax來實現這一點?謝謝。

+0

你能爲此發佈你的路線嗎?這很可能是HTTP動詞不排隊。 – kddeisz

+0

當然,只是發佈它。謝謝。 – Philip7899

+0

您收到一個HTML格式的請求,並且您有一個.js.erb文件(在最後生成一個JS文件的ERB文件),這就是Rails抱怨的原因:爲了響應HTML格式,他正在尋找'profile_form。 html.erb'。您可以創建此文件並自行插入腳本標記:'' – MrYoshiji

回答

-1

你需要的是一個部分,例如,_profile.html.erb。下劃線告訴Rails這個文件被渲染爲部分。在你的profile_form.js.erb你可以嘗試。

$('.tab-edit-profile').html("<%= escape_javascript(render 'profile') %>"); 

這應該讓你去靜態內容。對於動態,請設置一個@profile實例變量並嘗試。

$('.tab-edit-profile').html("<%= escape_javascript(render @profile) %>"); 

請務必在您的控制器響應中使用render json: @profile

+0

太好了,非常感謝 – Philip7899

+0

這個投票的任何特殊原因? – beautifulcoder

1

從上面發佈的內容來看,這應該可以正常工作。我能想到的唯一的事情就是你沒有包含所需的JavaScript庫,並且幫助程序實際上並沒有發出AJAX請求。

您表示您使用的是Rails 4,所以我假設您也使用了資產管道。請確保您有以下線在app/assets/javascripts/application.js文件

//= require jquery 
//= require jquery_ujs 

和被包含在佈局的JavaScript正在使用的ProfilesController。假設佈局application.html.erb,確保您在佈局<head>節還有

<%= javascript_include_tag "application" %>