jQuery Mobile 在使用 UJS 远程链接接受标头时中断 Rails respond_to

Posted

技术标签:

【中文标题】jQuery Mobile 在使用 UJS 远程链接接受标头时中断 Rails respond_to【英文标题】:jQuery Mobile breaks Rails respond_to when using UJS remote links accept headers 【发布时间】:2013-06-09 21:45:25 【问题描述】:

我正在将我们的 Rails 3 网络应用程序转换为使用 jQuery mobile,但我遇到了“远程”链接问题。

我有以下链接:

= 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,控制器代码通过“html”分支而不是“json”分支,并以重定向响应。

我已经尝试添加

 :data =>  :ajax => "false" 

到链接,但我得到相同的效果。

在 jQuery Mobile 之前,UJS 发送带有以下接受头的请求:

Accept:application/json, text/javascript, */*; q=0.01

使用 jQuery Mobile 时,我得到了这个标题:

Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript

我相信标题的这种变化是服务器端行为变化的罪魁祸首。我无法通过客户端进行调试以确定谁在做什么。 UJS 显然仍在做某事,因为我收到了各种各样的“PUT 请求”,事情得到了适当的路由,等等,但我不确定是什么改变了标题。

谢谢! 丹尼尔

【问题讨论】:

找到问题了吗?尝试使用format.js 而不是 json? 【参考方案1】:

默认remote: true 转到format.js 子句(并搜索一些.js.erb 模板以发回),默认为format.html 并发回html 模板。

如果你想返回json,你应该在你的link_to调用中使用”data-type” => :json,比如:

<%= 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

【讨论】:

以上是关于jQuery Mobile 在使用 UJS 远程链接接受标头时中断 Rails respond_to的主要内容,如果未能解决你的问题,请参考以下文章

使用 ujs 手动提交远程表单的 Rails 方式

如何在禁用管道中包含“jquery_ujs”以便能够对表单使用“remote:true”?

jquery_ujs 和 rails-ujs 问题 ajax 页面的问题

使用 jQuery Mobile 1.4.2 远程自动完成列表视图提交表单?

如何绑定到表单的 ajax:使用 JQuery/Rails UJS 在 typescript 中取得成功

ajaxSetup 不适用于 Rails / jquery-ujs