0

내 자바 스크립트가 실행되지 않은 이유를 알아낼 수 없습니다 (실제로 실행되지 않았습니다).자바 스크립트가 실행되지 않습니다.

/app/assets/javascripts/application.js :

//= require jquery 
//= require bootstrap-sprockets 
//= require turbolinks 
//= require jquery_ujs 
//= require_tree . 

/app/controllers/project_controller.rb :

def upload 
    @projects = Project.all.order(updated_at: :desc) 
    @project = Project.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.js {render layout: false} 
    end 
end 

/app/views/projects/show.html.erb :

<%= link_to project_upload_path, :project => @project.id, class: "btn btn-default" do %> 
    Upload &nbsp; 
    <%= glyph("plus") %> 
<% end %> 

/app/views/projects/upload.html.erb :

<div class="row"> 
    <div class="col-xs-12"> 
     <h2>Upload File to <%= @project.name %> project</h1> 
    </div> 
    <br> 
    <div class="col-xs-12"> 
     <%= render :partial => "uploadform", :action => "savefile" %> 
    </div> 
</div> 

/app/views/projects/_uploadform.html.erb :

<%= form_for :upload, url: {action: "savefile"}, :multipart => true do |f| %> 
    <%= f.hidden_field(:project_id, :value => params[:id]) %> 
    <%= f.file_field :file, input_html: { hidden: true }, label: 'Upload Attachment' %> 
    <input id="file-display" class="input-large uneditable-input" type="text"> 
    <%= f.submit "Save File", :class => "btn btn-default btn-file", :id => "upload-btn" %> 
<% end %> 

/app/views/projects/upload.js.erb : 나는 모든 노력을

$(document).on('ajax:success', function() { 
    alert("Test"); 
}); 

. 내 컨트롤러에서 "{render layout : false}"을 추가하고 제거했습니다. "upload :.js.erb"에서 "ajax : success"대신 "page : change"및 "turbolinks : load"를 시도했습니다. "_uploadform.js.erb"("upload.js.erb"대신)에서 Java-Ready 기능을 모두 시도했습니다. 나는 link_to (show.html.erb)에서 "remote : true"를 시도했다. 그러나 js.erb (alert 만 보임)를 실행한다. 4.2.1에서 4.2.7.1로 Rails를 업데이트하고 application.js에서 "// = require jquery.turbolinks"를 시도했습니다 (위의 모든 문서 준비 함수 사용).

Started GET "/projects/upload/20" for 127.0.0.1 at 2016-10-05 14:05:48 +0200 
Processing by ProjectsController#upload as HTML 
    Parameters: {"id"=>"20"} 
    Project Load (0.0ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1 [["id", 20]] 
    Rendered projects/_uploadform.html.erb (0.0ms) 
    Rendered projects/upload.html.erb within layouts/application (2.4ms) 
Completed 200 OK in 327ms (Views: 324.8ms | ActiveRecord: 0.0ms) 

이 제발 도와주세요 : 내 로그에서 볼 수 있듯이

은, 자바 스크립트로 응답 나던 것 같다. 나는 왜 이것이 어떤 식 으로든 작동하지 않는다는 것을 이해하지 못한다.

+0

나는'ajax : success' 선택기가 있다고 생각하지 않습니다. 당신은'$ (document) .ajaxSuccess'를 말 했나요? – vlaz

+0

아니요. 제가 어디서 그걸 얻을 수 있는지 모르지만, "turbolinks : load"나 "page : change"로는 작동하지 않습니다. 그래서, 예, 아마도 "아약스 : 성공"은 잘못되었지만 다른 선택자들 역시 효과가 없습니다. –

+0

어떤 차이가 있는지 모르겠지만'application.js'에서'jquery' 다음에'jquery_ujs'를로드하려고 시도합니다. –

답변

0

JavaScript를 통해 양식 게시를 실행하려면 레일스에 알려야합니다. 이상 http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-for 안내

<%= form_for :upload, url: {action: "savefile"}, :multipart => true, :remote => true do |f| %> <%= f.hidden_field(:project_id, :value => params[:id]) %> <%= f.file_field :file, input_html: { hidden: true }, label: 'Upload Attachment' %> <input id="file-display" class="input-large uneditable-input" type="text"> <%= f.submit "Save File", :class => "btn btn-default btn-file", :id => "upload-btn" %> <% end %>

가 레일을 참조 원격 => 진정한 당신의 form_for 도우미 : 로그에서 당신은 PagesController는 HTML 렌더링되고 있지 JS

Processing by ProjectsController#upload as HTML

시도가 추가 볼 수 있습니다 정보.

+0

슬프게도 이것은 작동하지 않습니다. 또한 "upload.js.erb"에서 "_uploadform.js.erb"로 이동하려고 시도했지만 로그에서 JS 대신 HTML로 렌더링 된 것을 볼 수 있습니다. data-remote = " 내 양식의 HTML에서 '사실'입니다. 다른 아이디어? –

+0

내가 찾은 것, 내가 만약 "defaults : {: format => 'js'}"를 내 routes.rb에 설정했다면, 오류로 인해 위조 (protect_from_forgery : : upload :를 제외) 예외를 생성해야한다는 것을 알았습니다 : "보안 경고 : 다른 사이트의

0

양식 정의에 대해 : multipart => true 및 : remote => true를 요구하는 파일을 AJAX 요청으로 업로드하려고 시도하는 것 같습니다.

리모컨을 사용하여 파일 업로드를 수행 할 수 없지만 Remotipart gem을 사용하면이 문제를 쉽게 해결할 수 있습니다. 코드를 더 이상 변경하지 않고도 AJAX 파일을 업로드 할 수 있습니다.

  1. 가 // =이 응용 프로그램에을 jquery.remotipart 필요 를 추가하여 Gemfile에 보석 'remotipart'를 추가합니다.
  2. 사용 원격 (jquery_ujs 후) JS : 사실멀티 : 양식 선언

에서 사실은 이제 비동기 적으로 파일을 업로드 할 수 있어야한다.

더 많은 정보를 원하시면 https://github.com/JangoSteve/remotipart

+0

실제로 FileBrowser 단추에 대한 Boostrap 디자인 사용하려고합니다.이 상황에서 (페이지가로드 된 후 무엇이든 할 수있는) 자바 스크립트를 가질 수 있습니까? –

+0

글쎄 정확히 remotipart 무엇입니까 당신을 준다. 나는 더 명확한 지시로 내 대답을 업데이트했다. – David

+0

고마워.하지만 예상대로 작동하지 않아. 어쩌면 내가 무엇을 성취하려고하는지 잘 모르겠다. 자바 스크립트를 실행하고 싶다. ipt 내 "파일 찾아보기"버튼 (내 form_for가있는보기)이있는보기가로드를 마쳤습니다. 뭔가를 업로드 한 후에가 아닙니다. remotipart와 함께, 내 자바 스크립트는 그 시점에서 실행되지 않습니다. –

관련 문제