2016-03-25 13 views
1

私のアプリケーションでは、AJAXリクエストを呼び出しています。リクエストが発生した後、別のパスにリダイレクトしたいと思います。私が持っている問題は、これをどうやって行うのか正確にはわかりません。私は "jsonをレンダリングして、Ajaxリクエストのコールバックの中でそれに応答できる"と暗示されていましたが、私はかなり長い間試してきました。リダイレクトAJAXコールバック内部

AJAX:

$.ajax({ 
     url: sub_url, 
     type: 'POST', 
     data: form_data 
    }).success(function(){ 
     //stuff 
    }).fail(function(){ 
     //stuff 
    }); 

更新アクション:

def update  
    current_submission.update_attributes(secret_params)  

    render :json => { :message => "Success!" } 
end 

私のAJAX要求とレンダリングすべてが正常に動作JSONは、私はしかしリダイレクトする方法について迷ってしまいました。ただredirect_toupdateメソッドに入れるだけでは何もしません。私がこれまでに発見した唯一の解決策はこれです:私は言われた

respond_to do |format| 
    format.js { render js: "window.location.href = '#{mypath_path}'" } 
end 

は悪い習慣だったと私は、コードを見つけたとき、私はそうと仮定しました。

AJAXリクエストとレールアクションがどのように発射されるのか、どのように/いつ/どのような順番になっているのかまだ十分には分かりません。あなたはJSONレスポンスににリダイレクトしたいパスについて

答えて

2

戻り先:

def update  
    current_submission.update_attributes(secret_params)  

    render :json => { :new_path => "#new_path" } 
end 

次に、ブラウザのURLを更新するsuccess関数内location.replace()を使用します。

$.ajax({ 
    url: sub_url, 
    type: 'POST', 
    data: form_data 
}).success(function(d){ 
    // update location on success 
    location.replace(d.new_path); 
}).fail(function(){ 
    //stuff 
}); 
+1

'使用することを検討してください。 replace() '。 – Liroy

+1

OK - 私は 'replace()'を使う答えを更新しました。 – dana

+0

@dana恐ろしい、それは完全に動作します。私はこれを理解しようとしている。 'd'は私の' render json'から引き出されたオブジェクトです。その後、成功関数内の関数に渡されます。ここからは、渡されたオブジェクト( 'd.new_path')からアクセスしたデータで置き換えられます。 そうですか?もしそうなら、私は、この場合レンダリングがどのように/いつレンダリングされたかは分かりませんでした。 –

関連する問題