2012-01-10 20 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のために解析することができます。あなたはjQueryのを使用している場合

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

良いですブログ。私はそれが好き。 –

3

また、AJAX要求を適切にリダイレクトするために、あなたのApplicationControllerでこれを置くことができますajax投稿

var jqxhr = $.post("example.php", function() { 
    // Do what it completed will do 
}) 
.error(function() { 
    location.href = '/error.html'; 
}) 
+0

@ iWasRobbed-私はこの答えが好きですが、OPはRails 3を指定していますので、間違っていない限り 'render(:update)'は動作しません – Yarin

+0

@Yarin WorksはRails 3に対してうまく動作します。レンダリング(:update)を置き換える必要がある3.1+ @ – iwasrobbed

+0

@ iWasRobbed-私は修正されました。 – Yarin

1

は、あなたが.ajaxError()

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

を使用することができますかあなたが想定しています

関連する問題