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的主要内容,如果未能解决你的问题,请参考以下文章
如何在禁用管道中包含“jquery_ujs”以便能够对表单使用“remote:true”?
jquery_ujs 和 rails-ujs 问题 ajax 页面的问题
使用 jQuery Mobile 1.4.2 远程自动完成列表视图提交表单?