1

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は明らかにまだ何かを行っていますが、何がヘッダーを変更しているのかわかりません。

ありがとうございました!
ダニエル

4

1 に答える 1

0

デフォルトでremote: trueは、format.js句に移動し (そして、送り返す .js.erb テンプレートを検索します)、デフォルトformat.htmlで html テンプレートを送り返します。

json を返したい場合は、次のように呼び出しで使用する必要が”data-type” => :jsonあります。link_to

<%= link_to 'Show Full Article', @article, :remote => true, "data-type" => :json %>

ソース: http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

于 2014-11-17T20:06:47.407 に答える