按下表单提交按钮触发我的application.js中的ajax post调用:
$("#form_div").on("click", "#submit_button", function() {
**code to capture data**
$.ajax({
type: "POST",
url: "/units/",
data: { 'var_1': var_1,
'var_2': var_2,},
success:function(){
alert("Details saved successfully!!!");
},
dataType: "text"
});
// stop normal form submission behaviour
$("#add_DU_form").submit(function(e){
return false;
});
});
这调用了我的rails控制器(units_controller.erb)中的'create'方法,并成功创建了一条新记录。
def create
** code to create a new record **
if @delivery_unit.save
flash.notice = "Successfuly added"
redirect_to :controller => "units", :action => "index", :id => params[var_1]
end
end
问题是flash通知和'redirect_to'(在成功创建记录时调用)不起作用。我必须手动刷新页面才能看到flash通知和新记录。
我如何获得我的flash通知和重定向到工作?谢谢!
最后这是一个相当简单的修复。
如果AJAX调用被成功提交,我只需重定向到application.js中的新URL。
。
$("#form_div").on("click", "#submit_button", function() {
**code to capture data**
// set URL to direct to upon successful AJAX call
var redirect_url = "/units?op_session_id=" + op_session_id;
$.ajax({
type: "POST",
url: "/units/",
data: { 'var_1': var_1,
'var_2': var_2,},
success:function(){
alert("Details saved successfully!!!");
// redirect to new URL
$(location).attr('href', redirect_url);
},
dataType: "text"
});
// stop normal form submission behaviour
$("#add_DU_form").submit(function(e){
return false;
});
});
这也保留了rails的flash。通知功能,如flash通知,显示当页面下一次刷新(即当重定向到新的URL)。
重定向将改变ajax调用返回的内容,但它不会对发出ajax请求的页面做任何事情,除非您告诉它这样做。如果你收到了"details saved successfully"的提示,那么这就是你所能期望发生的。
如果你绝对必须使用ajax提交表单,那么你需要用javascript处理新的记录。触发刷新可能符合您的目的。
但是如果你不需要在这里使用ajax,那么就不要使用它,重定向应该可以工作