Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Rails 3发布一个ajax帖子,后跟一个相同URL的GET_Jquery_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Jquery Rails 3发布一个ajax帖子,后跟一个相同URL的GET

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

如下图所示,我在一个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 => "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;
});