わかりました、少し異なるアプローチを使用しましたが、問題は解決しました。
注:モバイルブラウザにはfirebugがないため、レールからモバイルデバイスに送信されたものを確認するにはwiresharkを使用する必要がありました....ブラウザに送り返されたデータを見ると、解決策が明らかになりました、json文字列のみを受け取ることを期待していたのに、応答にアプリケーションレイアウトが含まれていることがわかりました。
1) コントローラー アクションを呼び出すために使用される jqm 形式のボタンは次のとおりです。
<div class="ui-block-c">
<%= link_to "compute", '#', class: 'compute-myval',:"data-role" => "button", :"data-ajax" => false %>
</div>
2) コントローラー アクションは結果をインスタンス変数に保存し、respond_to json (コントローラー名は「visits_controller」、コントローラー アクションは「compute」)
@total = "value returned from web service"
...
respond_to do |format|
format.js #used for HTML views
format.json
end
3) という名前のビューがあります
app/views/visits/compute.json.erb
その内容は
{ "total": "<%= @total %>" }
4)ボタンが押されたときに実行されるjqueryコードは
$('form').on('click', '.compute-myval', function(event) {
var url;
url='/visit/compute';
url += '/' + $('#visit_field1').val();
url += '/' + $('#visit_field2').val();
url += '/' + $('#visit_field3').val();
$.ajax( {
url: url,
data: $(this).serialize(),
success: function (mydata) {
$('#visit_resultfield').val(mydata.total);
},
dataType: 'json'
});
return event.preventDefault();
});
5) :mobile 形式を管理するには、Mobylette gem を使用します。Ajax 経由でトリガーされるコントローラー アクションがモバイル フォーマットを使用し、application.mobile.erb テンプレートが適用されることを回避するために、Mobylette 用にいくつかの構成をセットアップする必要がありました (application_controller.rb 内)。
include Mobylette::RespondToMobileRequests
mobylette_config do |config|
config[:skip_xhr_requests] = false
config[:fallback_chains] = { mobile: [:mobile, :html, :json] }
end
他に必要なのは、app/layouts の下に、1 行だけを含む application.json.erb という名前のファイルを用意することです。
<%= yield %>
したがって、compute.mobile.erb ビューがなく、フォールバックが :json であり、テンプレートが何も追加しないため、機能します。
6) Rails ログの出力は次のとおりです。
Started GET "/visit/compute/3/78/66" for 192.168.1.7 at 2012-12-22 00:13:35 +0100
Processing by VisitsController#compute as JSON
Parameters: {"field1"=>"3", "field2"=>"78", "field3"=>"66"}
Rendered visits/compute.json.erb within layouts/application (0.1ms)
Completed 200 OK in 1335ms (Views: 5.4ms | ActiveRecord: 1.0ms)
7) Jqm フォームのフィールド "resultfield" に合計値が入力されます。
任務完了...