2012-01-10 5 views
3

У меня есть простой сценарий, когда я хочу запросить страницу. Формат запроса - ajax. Если в контроллере/логике действий для этого запроса есть некоторая ошибка, я хочу перенаправить на страницу с ошибкой. Проблема в том, что перенаправление не является типом ответа javascript, поэтому я не уверен, будет ли он работать.rails 3 - как реализовать ответ перенаправления с помощью запроса ajax

Если ошибок нет, то я хочу, чтобы страница обновлялась с помощью соответствующего типа ответа javascript.

Какова наилучшая практика для получения ответов на перенаправление при условии, что формат запроса является ajax?

Образец быстрого кода был бы очень признателен.

Спасибо.

+0

Вы можете указать конкретную библиотеку ajax, которую используете? JQuery или прототип-JS и т.д. – Jirapong

+0

это поможет http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call – dbKooper

ответ

3

This blog post просветил меня на том, что я думаю, это правильный способ сделать это, если ваш ответ ajax - ajax; по крайней мере, в ненавязчивой парадигме javascript. В сущности, вызов ajax всегда возвращает стандартный пакет json, который может анализироваться на информационную полезную нагрузку или URL-адрес перенаправления.

+0

хорошо блог. Мне нравится. –

3

Вы также можете поместить это в ApplicationController перенаправлять правильно для AJAX запросов:

class ApplicationController < ActionController::Base 

    # Allows redirecting for AJAX calls as well as normal calls 
    def redirect_to(options = {}, response_status = {}) 
    if request.xhr? 
     render(:update) {|page| page.redirect_to(options)} 
    else 
     super(options, response_status) 
    end 
    end 

end 
+0

@ iWasRobbed- Мне нравится этот ответ, но OP задает Rails 3, и поэтому 'render (: update)' не будет работать, если я не ошибаюсь – Yarin

+0

@Yarin Works отлично подходит для Rails 3. Это когда вы попадаете в Rails 3.1+, что вам нужно заменить 'render (: update)' – iwasrobbed

+0

@ iWasRobbed- я стою исправлен – Yarin

1

Если вы используете JQuery, вы можете использовать .ajaxError()

$(document).ajaxError(function(event, request, settings){ 
    location.href = '/error.html'; 
}); 

или предполагаем, что вы сделать ajax post

var jqxhr = $.post("example.php", function() { 
    // Do what it completed will do 
}) 
.error(function() { 
    location.href = '/error.html'; 
}) 
Смежные вопросы