вземете redirect_to и флаш известия, за да работят след изпращане на ajax формуляр

Натискането на бутон за изпращане на формуляр задейства ajax post call от моя application.js:

$("#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;
     }); 
});

Това извиква метода 'create' в моя rails контролер (units_controller.erb) и нов запис е създаден успешно.

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

Проблемът е, че флаш известията и 'redirect_to' (извиква се при успешно създаване на запис) не работят. Трябва ръчно да опресня страницата, за да видя флаш известия и новия запис.

Как мога да получа бързите си известия и да пренасоча към работа? Благодаря!


person user3711600    schedule 17.08.2014    source източник
comment
защо изпращате формуляр с Ajax?   -  person Raghvendra Parashar    schedule 17.08.2014
comment
Трябва да използвам ajax, защото формулярът се генерира динамично с помощта на javascript (т.е. не се съдържа в DOM, когато страницата е първоначално заредена). Не можах да изпратя формуляра, без да използвам ajax.   -  person user3711600    schedule 18.08.2014
comment
В този случай не е необходимо да използвате ajax. Ако формулярът не се изпращаше нормално, вероятно сте направили нещо нередно при създаването му.   -  person philh    schedule 18.08.2014


Отговори (2)


В крайна сметка това беше доста проста поправка.

Ако извикването на AJAX беше изпратено успешно, просто пренасочих към нов URL в моя application.js.

i.e.

$("#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.notice, тъй като флаш известията се показват при следващото опресняване на страницата (т.е. при пренасочване към новия URL).

person user3711600    schedule 18.08.2014
comment
Последният коментар беше точно това, от което имах нужда. Благодаря. - person DaniG2k; 03.10.2019

Пренасочването ще промени това, което ajax извикването връща, но няма да направи нищо за страницата, която прави ajax заявката, освен ако не му кажете. Ако получавате предупреждението „подробностите са запазени успешно“, това е всичко, което можете да очаквате да се случи.

Ако абсолютно трябва да използвате ajax, за да изпратите формуляра, тогава ще трябва да направите нещо с javascript, за да обработите новия запис. Задействането на опресняване може да работи за вашите цели.

Но ако не е необходимо да използвате ajax тук, просто не го използвайте и пренасочването трябва да работи.

person philh    schedule 17.08.2014
comment
да, трябва да използвам ajax - вижте коментара по-горе. не съм сигурен, че опресняването ще работи, тъй като искам да пренасоча към друга страница. и улики как да направите това? - person user3711600; 18.08.2014