перенаправление при создании ajax

#jquery #ruby-on-rails #ajax

#jquery #ruby-on-rails #ajax

Вопрос:

Можно ли перенаправить в другое место в контроллере во время обработки ajax? Я имею в виду, что я отправляю AJAX-запрос, но во время его обработки в контроллере я обнаруживаю, что хочу отменить ajax-запрос и перенаправить его в совершенно другое место. Я использую это в своей форме клиента. Это работает так: кто-то нажимает кнопку create в моей форме, он проверяет атрибуты формы через ajax, если они неверны, он возвращает ошибки, в противном случае он перенаправляет на нового клиента. Есть идеи?

Комментарии:

1. это скорее вопрос javascript, чем ruby on rails

2. Это также больше похоже на проверку, которая, предполагая, что вы не хотите обновлять страницу посередине, как сказал РагеЗ, вероятно, лучше решается с помощью JavaScript. Итак, что-то вроде проверки на стороне клиента с помощью jQuery, например. ( bassistance.de/jquery-plugins/jquery-plugin-validation )

3. Вы можете использовать ‘window. location = location;’ в файле js.erb.

Ответ №1:

Вы не можете перенаправить с контроллера, но после завершения проверки атрибута вы возвращаете «успех» при успешной проверке.Вы можете проверить в jquery, является ли значение success или нет.Для лучшего понимания обратитесь к следующему примеру.

 $.post(
    "http://localhost/photo_tool/index.php/photo_tool/login",
    {
       username:$('#username').val(),
       password:$('#password').val()
    },
    function(result){
    if(result=='success')
    {   
      window.location.href = 'Your URL here';
      //You can also use window.location.replace("Your URL here");
    }
    else
    {
     $('#error').html(result);
    }
  });
  

В приведенном выше примере контроллер возвращает «успех» при успешном входе в систему.

Ответ №2:

Я нашел кое-что намного лучше, поэтому вот код, который вам нужно добавить в application_controller:

 def redirect_to(options = {}, response_status = {})
  if request.xhr?
    render(:update) { |page| page.redirect_to(options) }
  else
    super(options, response_status)
  end 
end
  

а затем в действии используйте стандартный redirect_to