获得redirect_to和flash通知工作后,ajax表单提交



按下表单提交按钮触发我的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,那么就不要使用它,重定向应该可以工作

最新更新