заставить redirect_to и флэш-уведомления работать после отправки формы ajax

Нажатие кнопки отправки формы вызывает почтовый вызов ajax из моего 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

Проблема в том, что уведомления flash и '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