Rails 3 Web アプリを jQuery モバイルを使用するように変換していますが、「リモート」リンクに問題があります。
次のリンクがあります。
= link_to "Text", foo_url, :method => :put, :remote => true
サーバー上では、次のように処理しています。
respond_to do |format|
if foo.save
format.html { redirect_back_or_to blah_url }
format.json { render :json => {:status => "ok"} }
end
end
これは以前は素晴らしく機能していました。ただし、jQuery Mobile を追加したため、コントローラー コードは「json」ブランチではなく「html」ブランチを経由し、リダイレクトで応答します。
追加してみました
:data => { :ajax => "false" }
リンクに移動しますが、同じ効果が得られます。
jQuery Mobile の前は、UJS は次の Accept ヘッダーを使用してリクエストを送信していました。
Accept:application/json, text/javascript, */*; q=0.01
jQuery Mobile では、次のヘッダーが表示されます。
Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
このヘッダーの変更が、サーバー側の動作の変更の原因だと思います。クライアント側でデバッグして、誰が何をしているのかを正確に把握できませんでした。ある種の「PUTリクエスト」を受け取ったり、物事が適切にルーティングされたりしているため、UJSは明らかにまだ何かを行っていますが、何がヘッダーを変更しているのかわかりません。
ありがとうございました!
ダニエル