Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未使用远程JSON表单(jQuery UJS)执行rails-JS回调_Jquery_Ruby On Rails_Ruby_Ruby On Rails 3_Ujs - Fatal编程技术网

未使用远程JSON表单(jQuery UJS)执行rails-JS回调

未使用远程JSON表单(jQuery UJS)执行rails-JS回调,jquery,ruby-on-rails,ruby,ruby-on-rails-3,ujs,Jquery,Ruby On Rails,Ruby,Ruby On Rails 3,Ujs,在.erb视图中考虑以下表单: <%= form_tag(harvester_next_url, :method => "post", :remote => true, "data-type" => :json, :id => "answerForm") do %> <div id="dynamicFormContent"></div> <% end %> “post”,:remote=>true,“数据类型”=>:jso

在.erb视图中考虑以下表单:

<%= form_tag(harvester_next_url, :method => "post", :remote => true, "data-type" => :json, :id => "answerForm") do %>
<div id="dynamicFormContent"></div>
<% end %>
“post”,:remote=>true,“数据类型”=>:json,:id=>“answerForm”)do%>
在某些情况下,我想在
next
方法中使用
render:js=>“window.location='{definitions\u path}'”

但是,这不会在浏览器中执行。响应的正文中有“window.location…”,
内容类型设置为
text/javascript
,请求的
accept
也有
text/javascript

Rails版本是3.2.8

一些附加信息:我不想将表单操作切换为使用JS格式,因为JS回调代码只是来自控制器的可能响应之一。另一次,我需要一些JSON来处理

问题是:是否有可能在不使用客户端重定向的情况下使其工作(即从JSON响应获取window.location),等等。?好了,这对非远程表单很有效


ADD当XHR完成时,它以
status=“parsererror”
结束。显然,这是因为jQuery试图将响应解析为JSON,即使它是
text/javascript
。问题仍然悬而未决。

如果您请求json,它不会立即呈现为javascript,这意味着您需要从json响应中获取url,例如一个
'next-url'
键。您可以在ajax回调中实现这一点

以下是一些阅读材料,可以让你的工作变得简单:

Rails ujs教程(带回调):

如何以REST方式响应json:


还要检测xhr:

侦听回调并在客户端执行重定向:

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

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

我终于让它工作了。然而,我意识到按原样执行传入的JS通常是一种肮脏的方法(你们都告诉过我)。但是,只要我的问题是关于这种肮脏的方法,如果你真的需要的话,我会发布一个如何让它工作的想法

如果我们提供纯JS,我们有
parsererror
状态,我们可以:

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

谢谢大家

关键是,我正在寻找一种不太显眼的方式:)从JSON响应中获取URL将如您所提到的那样工作,但我想找出“呈现js”方法的错误。这完全不可能吗?它是一个bug还是一个特性?