2010-02-26 4 views
1

레일즈 2.3.5를 실행하는 앱에는 JSON API가 많이 있습니다.Rails 2.3에서 RJS MIME 유형을 어떻게 오버라이드합니까?

계약자가 와서 앱에서 몇 가지 작업을하고 몇 군데 RJS를 사용했습니다. 주요 웹 사이트에 RJS를 사용하는 일부 컨트롤러 작업 또한 API의 일부 여야합니다.

문제는 JSON API 요청이 내가 원하는 것이 아닌 RJS 응답을 트리거한다는 것입니다. 브라우저에서 RJS 응답을 보내고 싶습니다. 그러나 API 요청 ("application/json"Accept 및 Content-Type 헤더를 사용하여 구별 됨)이되면 API 응답을 보내고 싶습니다.

내가 무엇을 말할 수에서

은, 레일 등

텍스트/자바 스크립트 응용 프로그램/JSON

가 할 수있는 방법이 있습니까 즉, 자바 스크립트를 포함 모든 MIME 유형에 대한 RJS 응답을 트리거 텍스트/자바 스크립트에만 응답하도록 RJS를 강제 하시겠습니까? 아니면이 문제를 해결할 더 좋은 방법이 있습니까?

def show 
    @dashboard = @user.dashboard 
    respond_to do |wants| 
    wants.html 
    wants.json { render :json => @dashboard } 
    end 
end 

의 문제점은,이 컨트롤러의보기 폴더에 show.rjs 템플릿이 :

내가 다음과 같습니다 코드를 가지고, 좀 더 명확하게합니다. 누군가가 API에 부딪혔을 때 json 결과를 렌더링하려면 위의 목록에서와 같이 대신 show.rjs 템플릿을 렌더링해야합니다.

API 클라이언트가 원하는 json 결과를 얻고 웹 사이트의 사람들을 위해 RJS 템플릿을 렌더링하도록하려면 어떻게해야합니까? 응용 프로그램/JSON에 대한 응답의 내용 유형을 설정합니다 : 레일 문서 (http://api.rubyonrails.org/classes/ActionController/Base.html) "JSON 렌더링에 따르면"

def index 
    respond_to do |format| 
    format.html # Renders index.html.erb as usual 
    format.xml { render :json => {:name => "raskchanky"}.to_json } 
    end 
end 

: 컨트롤러의 액션에서

답변

1

당신은 당신의 mime_types.rb에 정의 된 JSON을해야합니다 그리고 당신은이 작업을 수행 할 수 있어야한다 :

def show 
    @dashboard = @user.dashboard 
    respond_to do |format| 
    format.html 
    format.json {render :json => @dashboard} 
    format.js 
    end 
end 

자세한 내용은 여기 읽기 : 당신이 당신의 자바 스크립트가를 전송되어 있는지 확인 http://ryanbigg.com/2009/04/how-rails-works-2-mime-types-respond_to/

0

다음 시도하십시오.

0

있습니까 올바른 헤더? rjs를 할 때 일반적으로 format.js에 응답하여이 작업을 수행합니다. 이렇게하면 json과 js 응답을 쉽게 구분할 수 있습니다.

일반적으로 내 문제는 내 아약스 액션이 실제로 적절한 형식으로 요청을 보내는 것을 보장하는 데있었습니다. 확실하지 않은 경우 요청에 '형식': 'js'매개 변수를 추가 할 수 있습니다. In jQuery :

// try to get it to figure out rjs actions by itself 
$('a').click(function(e){ 
    e.preventDefault(); 
    $.get({ 
    url: this.attr('href'), 
    dataType: 'script', 
    success: responseFunction 
    }); 
}); 

// or force the format 
$('a').click(function(e){ 
    e.preventDefault(); 
    $.get({ 
    url: this.attr('href'), 
    data: {format: 'js'}, 
    success: responseFunction 
    }); 
}); 
관련 문제