2012-11-22 49 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 %> 

在某些情況下,我想問題的next法 一個JS回調render :js => "window.location = '#{definitions_path}'"

但是,這不會在瀏覽器中執行。響應在主體中具有「window.location ...」並且content-type設置爲text/javascript,請求的accept也具有text/javascript

Rails版本是3.2.8。

一些額外的信息:我不想切換表單操作使用JS格式JS代碼回調僅是從控制器可能的反應之一。另一次,我需要一些JSON來處理。

問題:是否有可能使其工作而不使用客戶端重定向(即從JSON響應獲取window.location)等? AFAIK,這適用於非遠程表單。

ADD當XHR完成時,它以status = "parsererror"結束。顯然,這是因爲jQuery試圖將響應解析爲JSON,即使它是text/javascript。問題仍然存在。

回答

1

最後我得到它的工作。不過,我意識到,這是一般一個骯髒的方式(大家都這麼告訴我的)執行傳入JS原樣。但是,只要我的問題是關於那個骯髒的方法,我會後的如何使它工作,如果你真的需要它的想法。

鑑於我們已在情況下,我們提供純JS parsererror狀態,我們可以:

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

謝謝大家!

0

如果您要求使用json,它將不會立即呈現爲javascript,這意味着您需要從json響應中獲取url,例如'next-url'鍵。你可以在ajax回調中做到這一點。

下面是一些閱讀,應該讓你嘗試做簡單的東西:

的Rails UJS教程(與回調):http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

如何應對REST風格的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}