2012-11-22 44 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}