2017-05-09 3 views
0

하나의 입력 및 보내기 버튼이있는 간단한 원격 양식이 있습니다. 성공 : 나는 아약스에 대한 리스너를 생성Rails 원격 양식이 성공했지만 데이터가 반환되지 않습니다.

$ -> 
    $form = $('#post-form') 

    $form.on 'ajax:success', (e, data, status, xhr) -> 
    console.log e 
    console.log data 
    console.log status 
    console.log xhr 

그리고 내 컨트롤러 :

def create 
    @post = Post.new(post_params) 
    @post.user_id = 3 

    if @post.save 
     render partial: 'posts/view', locals: { post: @post }, status: :ok 
    else 
     render json: @post.errors, status: :unprocessable_entity 
    end 
    end 

내가 볼 것을 요청 백엔드에 전달하고 상태 (200)이 반환됩니다

Rendered posts/_view.html.erb (3.0ms) [cache miss] 
Completed 200 OK in 480ms (Views: 466.6ms | ActiveRecord: 7.0ms) 

그러나 DevTools로에를 알겠습니다 :

enter image description here

내가 뭘 잘못하고 있니?

+0

같은 문제가 발생했습니다. 해결책을 찾았습니까? –

+0

@DeepanshuGoyal 예, 레일 사용을 중단했습니다. –

답변

1

나는 당신이 게시물을 만든 후 데이터에 대해 수행 할 작업 모르겠지만, JSON를 통해 액션에 전송 된 데이터를 수신하기 위해, 당신은에서 JSON을 반환해야 동작은으로 다음 : 그것은 JSON을 그리고 그것은이 HTML 다만 보통의 경우 요청을 처리 할 수 ​​있는지

def create 
    @post = Post.new(post_params) 
    @post.user_id = 3 

    respond_to do |format| 
    if @post.save 
     format.html { render partial: 'posts/view', locals: { post: @post } } 
     format.json { render json: @post, status: :created } 
    else 
    format.html { render :new } # assuming you have a view file named "views/posts/new.html.erb" 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
    end 
    end 
end 

이 방법 당신은 요청을 처리 할 수 ​​있습니다.

+0

이것은 내 질문에 대한 대답이 아닙니다. 백엔드에 html을 렌더링하고 요청이 어디에서 오는지에 상관없이 앞쪽으로 전달하고 싶습니다. –

0

내가 과거에 사용한 기술은, Ajax 요청의 일부로 즉

def create 
    @post = Post.new(post_params) 
    @post.user_id = 3) 
    respond_to do |format| 
     format.js 
    end 
end 

그리고 /views/posts/create.js.erb에를 DOM의 일부를 대체 할 것입니다

$("#new_item").html("<%= escape_javascript(render partial: 'posts/view', locals: { post: @post }) %>"); 

this link을 살펴보십시오.

+0

나는이 접근법을 피하려고한다. 백엔드에서 렌더링 된 HTML을 전달할 수 없습니까? js가 뷰를 렌더링하는 방법을 알지도 못하고 내가 위임 한 것을 기억하고 싶지도 않습니다. –

+0

내 지식으로는 이것이 당신이 묘사하는 것을 수행하는 선호되고 우아한 방법입니다. 이것은 실제로 서버 측에서 렌더링 된 HTML을 전달하지만 페이지의 해당 섹션을 대체하는 Javascript로 래핑합니다. 페이지를 다시로드하지 않으려면이 작업을 수행해야합니다. 손끝을 사용하여 프론트 엔드에서이를 수행하면 JS가 더러워집니다. IMHO. – dps

+0

AJAX를 사용하지 않으려면 redirect_to @ post와 같은 작업을 수행하여 리소스로 다시 라우팅 할 수 있습니다. – dps