Ruby on Rails $ .ajax({dataType:'script'})表单提交,带有respond_to format.js和format.json

时间:2013-02-03 21:21:08

标签: jquery ruby-on-rails json

我有一张通过ajax提交的表单。如果表单成功提交,页面将重定向到其他位置。如果表单失败,我将使用partials(.js.erb)和内联错误重新呈现表单。

这很好。

我遇到的问题是我想在页面重新呈现时将某种类型的json响应/数据发送回application.js。只是,我不确定这是否可行。

//的application.js

$(document).on('click','#sumbit_div',function(e) {
$.ajax({
   url: '/create',
   type: 'post',
   dataType: 'script',
   data: $('#the_form').serialize(),
   cache: false,
   success: function(xhr,data) {
     console.log('success');
   },
   error: function(data) {
     console.log('error')
     console.log(data.value_from_format_json);
   },
});
});

//在控制器中创建动作。

rescue ActiveRecord::RecordInvalid => e

respond_to do |format|
format.json {render :json => { :status => 403,:success => false }}  
format.js
end

我认识到即使失败的提交也是.ajax响应的成功。我可以处理后如何处理。现在我只想知道我是否可以完成后续工作。

最后一点是这是在rails 2.3上(仍处于升级过程中)。但我已经将所有jquery库(rails.js / jquery.js / etc)更新为与ujs一起使用。

感谢

2 个答案:

答案 0 :(得分:2)

您不应该数据发送到application.js,而应该从您的DOM中获取application.js pull 。让你的create.js.erb修改DOM,以便application.js捕获它。

或者甚至更好,从你的create.js.erb调用你想要的函数传递你想要的参数。

答案 1 :(得分:0)

我想你需要将你的dataType改为json以获得js响应的“json”响应或“js”。