#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