Jquery Rails 3发布一个ajax帖子,后跟一个相同URL的GET
如下图所示,我在一个Rails 3.1应用程序中尝试发布一个链接,以使用块: views/wall/_problem.html.erbJquery Rails 3发布一个ajax帖子,后跟一个相同URL的GET,jquery,ruby-on-rails,rails-activerecord,Jquery,Ruby On Rails,Rails Activerecord,如下图所示,我在一个Rails 3.1应用程序中尝试发布一个链接,以使用块: views/wall/_problem.html.erb <li data-icon="check"> <%= link_to( url_for( :controller => 'completed_problems', :action => 'create', :problem_id => "#{problem.id}"), {:class =>
<li data-icon="check">
<%= link_to(
url_for(
:controller => 'completed_problems',
:action => 'create',
:problem_id => "#{problem.id}"),
{:class => "wall_problem",
:confirm => "Climbed it?",
:remote => true,
:"data-type" => "json",
:method => "POST"}) do %>
<div>stuff</div>
<% end %>
</li>
这个问题在范围上听起来确实类似于,但这是在使用jquery_ujs,我不相信我留下了任何自定义jquery代码。因此,我无法执行添加“return false;”问题中建议的解决方案
我怀疑问题出在以下三个地方之一:
我使用带有块的link_to元素的语法不正确
我在控制器内对请求的处理不正确
我不知何故把我的jquery_ujs翻了一番,我真的不认为这是真的,但它可能在这里
编辑
缩小问题范围1:
我把我的剧本改成了
<script>
$('.wall_problem').live('ajax:beforeSend', function() {
return false;
});
</script>
并发现POST现在没有通过,但GET通过了,确认问题似乎是AJAX处理程序正在拾取链接并将其作为POST正确提交,但没有拦截浏览器提交的GET
缩小问题范围2:
起初我没有提到它,但我正在使用Jquery mobile。现在,在将脚本标记恢复为以前的形式,然后禁用jquery mobile时,我再次尝试了该链接,它现在不提交GET,而是提交POST。这让我相信jquery ujs和jquery mobile如何与链接交互存在一些问题。基于我在上述编辑中包含的信息,我继续测试jquery mobile,并能够解决这些问题 首先,我更新了Jquery Mobile v1.0,它添加了linkBindingEnabled全局配置http://jquerymobile.com/demos/1.0/docs/api/globalconfig.html: 其次,我将该配置设置为False:
$(document).bind("mobileinit", function(){
$.mobile.linkBindingEnabled = false;
});
一个问题是否有许多已完成的问题?或者,问题是否已完成或未完成。如果是后者,我会在Post表中用一个布尔值来表示它是否完成。然后,您可以对控制器更新操作进行简单的AJAX调用,并将完成的属性设置为true或false。我不确定你的应用程序是否是这样构建的,但如果是这样,我会发布一个关于你如何解决它的答案。CompletedProblem对象实际上是用户和问题之间的连接对象,所以我认为这不会有帮助。这样做似乎只是为了解决更大的问题。如果一个用户有很多问题,并且问题属于某个用户,那么您不需要加入。通过一个简单的布尔字段,您可以执行诸如user.problems.where:completed=>false之类的作用域。这不是一个解决办法。代码更简单=>问题更少。此外,您还可以编写自己的Jquery函数来处理AJAX帖子,然后在响应中使用.js.erb模板更新视图
Started POST "/completed_problems?problem_id=11" for 127.0.0.1 at 2011-12-11 13:13:06 -0500
Processing by CompletedProblemsController#create as JSON
Parameters: {"problem_id"=>"11"}
# SQL stuff snipped from here
Completed 200 OK in 116ms (Views: 3.0ms | ActiveRecord: 2.6ms)
Started GET "/completed_problems?problem_id=11" for 127.0.0.1 at 2011-12-11 13:13:06 -0500
Processing by CompletedProblemsController#index as HTML
Parameters: {"problem_id"=>"11"}
Rendered completed_problems/index.html.erb within layouts/application (29.6ms)
Completed 500 Internal Server Error in 36ms
<script>
$('.wall_problem').live('ajax:beforeSend', function() {
return false;
});
</script>
$(document).bind("mobileinit", function(){
$.mobile.linkBindingEnabled = false;
});