2012-11-22 1 views
3

가 .erb 관점에서 다음과 같은 형식을 고려하여 실행하지 : 특정 상황에서레일 JS 콜백 원격 JSON 형태 (jQuery를 UJS)

<%= form_tag(harvester_next_url, :method => "post", :remote => true, "data-type" => :json, :id => "answerForm") do %> 
<div id="dynamicFormContent"></div> 
<% end %> 

를, I는 와 next 방법에 JS 콜백을 발행 할 render :js => "window.location = '#{definitions_path}'"

그러나 브라우저에서는 실행되지 않습니다. 응답에 본문의 "window.location ..."이 있고 content-typetext/javascript, 요청의 accepttext/javascript입니다.

레일 버전은 3.2.8입니다.

몇 가지 추가 정보 : JS 콜백 코드는 컨트롤러의 가능한 응답 중 하나이므로 JS 형식을 사용하도록 양식 작업을 전환하고 싶지 않습니다. 다른 시간에는 처리 할 JSON이 필요합니다.

질문 : 클라이언트 측 리디렉션 (예 : JSON 응답에서 window.location 가져 오는 중) 등을 사용하지 않고 을 사용할 수 있습니까? AFAIK, 이것은 비 원격 양식에서도 유효합니다.

ADD XHR이 완료되면 status = "parsererror"으로 끝납니다. 확실히 이것은 jQuery가 text/javascript이지만 JSON으로 응답을 구문 분석하려고하기 때문입니다. 질문은 아직 열려 있습니다.

답변

1

마침내 제대로 작동합니다. 그러나, 나는 입니다. 일반적으로 들어오는 JS를 그대로 실행하려면 더티 접근 방식을 사용하는 것이 좋습니다. 그러나 제 질문이 그 더러운 접근법에 관한 한, 당신이 정말로 필요하다면 그것을 작동시키는 방법에 대한 아이디어를 게시 할 것입니다.

는 우리가 할 수있는, 우리가 일반 JS를 제공 할 경우 parsererror 상태를 감안할 때 :

$('#answerForm').on('ajax:error', 
    function(e, data, status, xhr) 
    { 
    $.globalEval(data.responseText); 
    } 
); 

감사합니다 모두!

0

json을 요청하면 javson이 즉시 렌더링되지 않으므로 json 응답에서 URL을 가져와야합니다 (예 : 'next-url' 키). Ajax 콜백에서 그렇게 할 수 있습니다. 여기

당신이 쉽게 일을하려고하는지 확인해야합니다 몇 가지 독서의 :

레일합니다 (콜백) 튜토리얼을 UJS : http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

하는 방법 RESTfully하게 JSON으로 응답 : 또한 Rails 3: What is the proper way to respond to REST-ful actions with JSON in rails?

xhr을 감지하려면 : Rails detect if request was AJAX

+0

요점은 제가 다소 눈에 거슬리는 방법을 찾고 있습니다 :) JSON 응답에서 URL을 가져 오는 것은 앞에서 언급 한대로 작동하지만 "렌더링 js"접근 방식의 문제점을 파악하고 싶습니다. 완전히 불가능한가요? 버그 또는 기능입니까? – starteleport

1

콜백을 청취하고 클라이언트 측에서 리디렉션을 수행하십시오.

$('#answerForm').on('ajax:success', function(data) { 
    if (data.url) { 
    window.location = data.url; 
    } else { 
    // do something else... 
    } 
}) 

# -- controller code 
render json: {url: definitions_path}