jquery post with datatype=script and jquery mobile with rail



我有一个移动和html格式类型的应用程序;

表单中有一个字段必须用远程web服务计算的值填充。使用jquery,我使用$(post) API来调用控制器动作,该动作调用web服务

    $.post(url, $(this).serialize(), null, "script");

控制器计算实例变量…

@myvar = myvalue
....
respond_to do |format|
  format.js 
end

则返回一个.js。erb模板。这里我设置了表单

字段的值
$('#mymodel_myfield').val('<%= @myvar %>');

这在html中像一个魅力,但我不能让它在移动视图中工作,我使用Jquery移动与Mobylette gem。

js. js. js中的jquery函数。Erb模板不会被执行,因为rails需要一个.mobile。erb文件。

我也试图使用不同的方法移动视图,即调用$。Post使用json或HTML数据类型,并使用回调函数注入.mobile. js。在JQM视图中使用Erb模板,但无法找到使其工作的方法。

提示吗?

好吧,用了一个稍微不同的方法,但是问题解决了。

注意:我必须使用wireshark才能看到发送的到底是什么通过rails到移动设备,因为移动设备上没有firebug吃嫩叶的动物当查看发回的数据时,解决方案变得清晰起来对于浏览器,我看到响应包含了应用程序布局,而我期望只接收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)管理:移动格式我使用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下有一个名为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"字段用total value填充。

任务完成…

最新更新